springboot集成kafka

我自己的一個小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,如果有什麼地方寫得不對的地方,還望幫忙指出,在這裏表示感謝!












發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章