1、建立叢集
http://kafka.apache.org/documentation/#quickstart
有一句我覺得特別重要: For Kafka, a single broker is just a cluster of size one.
1.1、命令列操作
#解壓檔案
tar -zxf kafka_2.11-1.1.0.tgz
cd kafka_2.11-1.1.0
#啟動Zookeerper
bin/zookeeper-server-start.sh config/zookeeper.properties
#啟動Kafka
bin/kafka-server-start.sh config/server.properties &
cp config/server.properties config/server-1.properties
cp config/server.properties config/server-2.properties
config/server-1.properties:
broker.id=1
listeners=PLAINTEXT://:9093
log.dir=/tmp/kafka-logs-1
config/server-2.properties:
broker.id=2
listeners=PLAINTEXT://:9094
log.dir=/tmp/kafka-logs-2
bin/kafka-server-start.sh config/server-1.properties &
bin/kafka-server-start.sh config/server-2.properties &
#建立叢集
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic myTopic
#檢視主題
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic myTopic
1.2、圖形化介面操作
除了命令列以為,也可以通過kafka-manager檢視
2、Spring Boot整合Kafka
2.1、引入Maven依賴
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
2.2、配置
spring:
kafka:
bootstrap-servers: 10.123.52.76:9092,10.123.52.76:9093,10.123.52.76:9094
consumer:
group-id: myGroup
2.3、收發訊息
package com.cjs.boot.message;
import lombok.extern.slf4j.Slf4j;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class MyListener {
@KafkaListener(topics = "myTopic")
public void processMessage2(String content) {
log.info("【Received Message From 'myTopic'】: {}", content);
}
}
package com.cjs.boot.controller;
import com.cjs.boot.response.RespResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.support.SendResult;
import org.springframework.stereotype.Controller;
import org.springframework.util.concurrent.ListenableFuture;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/message")
public class MessageController extends BaseController {
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
@GetMapping("/add.html")
public ModelAndView add() {
return new ModelAndView("message/add");
}
@PostMapping("/send.json")
@ResponseBody
public RespResult send(String text) {
ListenableFuture<SendResult<String, String>> result = kafkaTemplate.send("myTopic", String.valueOf(System.currentTimeMillis()), text);
return RespResult.success();
}
}
2018-05-04 12:36:59.736 INFO 7552 --- [nio-8080-exec-2] o.a.kafka.common.utils.AppInfoParser : Kafka version : 1.0.1
2018-05-04 12:36:59.736 INFO 7552 --- [nio-8080-exec-2] o.a.kafka.common.utils.AppInfoParser : Kafka commitId : c0518aa65f25317e2018-05-04 12:36:59.830 INFO 7552 --- [ntainer#0-0-C-1] com.cjs.boot.message.MyListener : 【Received Message From 'myTopic'】: 大家好啊
2018-05-04 12:37:24.107 INFO 7552 --- [ntainer#0-0-C-1] com.cjs.boot.message.MyListener : 【Received Message From 'myTopic'】: 吃飯啦
2.4、截圖