我自己的一個小Demo,在自己的Windows上進行
一、安裝zookeeper
先去zookeeper官網進行下載
http://zookeeper.apache.org/releases.html#download
下載後解壓到一個目錄:
1.進入Zookeeper設置目錄,筆者D:\develop\zookeeper\zookeeper-3.4.9\conf
2. 將“zoo_sample.cfg”重命名爲“zoo.cfg”
3. 在任意文本編輯器(如notepad)中打開zoo.cfg
4. 找到並編輯dataDir=D:\\develop\\zookeeper\\tmp
5. 與Java中的做法類似,我們在系統環境變量中添加:
a. 在系統變量中添加ZOOKEEPER_HOME = D:\develop\zookeeper\zookeeper-3.4.9\conf
b. 編輯path系統變量,添加爲路徑%ZOOKEEPER_HOME%\bin;
6. 在zoo.cfg文件中修改默認的Zookeeper端口(默認端口2181)可以在啓動zookeeper時看最後的啓動日誌
啓動日誌如下:
2018-03-10 18:25:08,183 [myid:] - INFO [main:NIOServerCnxnFactory@89] - binding to port 0.0.0.0/0.0.
0.0:2181
二、安裝與運行Kafka
首先下載kafka
http://kafka.apache.org/downloads.html。注意要下載二進制版本的
下載後解壓到任意一個目錄,我這裏的目錄是D:\develop\kafka\kafka_2.12-1.0.1
1. 進入Kafka配置目錄,D:\develop\kafka\kafka_2.12-1.0.1
2. 編輯文件“server.properties”
3. 找到並編輯log.dirs=D:\\develop\\kafka\\kafka-log,這裏的目錄自己修改成自己喜歡的
4. 找到並編輯zookeeper.connect=localhost:2181。表示本地運行
5. Kafka會按照默認,在9092端口上運行,並連接zookeeper的默認端口:2181。
運行:
重要:請確保在啓動Kafka服務器前,Zookeeper實例已經準備好並開始運行。
1.進入Kafka安裝目錄D:\develop\kafka\kafka_2.12-1.0.1
2.按下Shift+右鍵,選擇“打開命令窗口”選項,打開命令行。
3.現在輸入
.\bin\windows\kafka-server-start.bat .\config\server.properties
會報錯:找不到或無法加載主類需要對kafka安裝目錄中找到bin\windows目錄中的kafka-run-class.bat的%CLASSPATH%加上雙引號
如下:
set COMMAND=%JAVA% %KAFKA_HEAP_OPTS% %KAFKA_JVM_PERFORMANCE_OPTS% %KAFKA_JMX_OPTS% %KAFKA_LOG4J_OPTS% -cp "%CLASSPATH%" %KAFKA_OPTS% %*
再回到kafka根目錄下運行啓動命令:
.\bin\windows\kafka-server-start.bat .\config\server.properties
如果之前已經啓動過了,需要重新啓動的話,需要把之前的日誌目錄下所有文件全部清空後才能正常啓動
kafka在windows平臺就是有這個BUG,沒辦法。只能手動刪除\kafka-logs裏的日誌文件重啓kafka
三、寫代碼Demo
1、配置文件配置
#kafka
# 指定kafka 代理地址,可以多個
spring.kafka.bootstrap-servers=localhost:9092
# 指定默認消費者group id
spring.kafka.consumer.group-id=myGroup
# 指定默認topic id
spring.kafka.template.default-topic= my-replicated-topic
# 指定listener 容器中的線程數,用於提高併發量
spring.kafka.listener.concurrency= 3
# 每次批量發送消息的數量
spring.kafka.producer.batch-size= 1000
#key-value序列化反序列化
#spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
#spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
#spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
#spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.buffer-memory=524288
pom.xml支持配置
<!--kafka支持-->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency
2、kafka生產者
/**
* @Description: 生產者
* @author WEISANGNG
* @date 2018年3月10日
*/
@Service
public class KafkaProducer {
@Autowired
private KafkaTemplate kafkaTemplate;
/**
* 發送消息到kafka,主題爲test
*/
public void sendTest(){
kafkaTemplate.send("test","hello,kafka " + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")));
}
}
3、kafka消息者
@Service
public class KafkaConsumer {
protected static Logger logger=LoggerFactory.getLogger(KafkaConsumer.class);
/**
* 監聽test主題,有消息就讀取
* @param message
*/
@KafkaListener(topics = {"test"})
public void consumer(String message){
logger.info("test topic message : {}", message);
}
}
4、定時任務測試代碼
@Service
public class KafkaScheduled {
private static Logger logger = LoggerFactory.getLogger(KafkaScheduled.class);
@Autowired
private KafkaProducer kafkaSender;
// 然後每隔1分鐘執行一次
@Scheduled(fixedRate = 1000 * 20)
public void testKafka() throws Exception {
logger.info("KafkaScheduled...start");
kafkaSender.sendTest();
}
}
5、啓動類配置
/**
* @Description: 啓動入口
* @author WEISANGNG
* @date 2018年3月10日
*/
@SpringBootApplication
@EnableScheduling
public class KafkaApplication {
protected static Logger logger=LoggerFactory.getLogger(KafkaApplication.class);
public static void main(String[] args) {
SpringApplication.run(KafkaApplication.class, args);
logger.info("----------------SpringBoot Start Success-------------------");
}
}
6、結果
以上是隻一個入門的Demo,如果有什麼地方寫得不對的地方,還望幫忙指出,在這裏表示感謝!