上一輪我們介紹過RabbitMQ,這次我們來提提Kafka吧。Kafka與RabbitMQ一樣都提供了Message Queue 服務,但Kafka的功能更加適合大型系統的處理,資料吞吐量的表現也比RabbitMQ好,除此之外,Kafka還能提供 Streaming Processing與簡易的Databse功能,就讓我們一起來看看吧。
這是Kafka的架構圖,與RabbitMQ的關係類似。以下介紹Kafka的核心概念。
Kafka的優勢有
想要測試Kafka,可以參考官方的教學:https://kafka.apache.org/quickstart
以下簡單撰寫使用教學
$ tar -xzf kafka_2.13-3.8.0.tgz
$ cd kafka_2.13-3.8.0
$ bin/zookeeper-server-start.sh config/zookeeper.properties
bin/kafka-server-start.sh config/server.properties
這樣本機就已經啟用Kafka了,接下來看SpringBoot的設定吧。首先是Maven安裝依賴。
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
接著在Application.properties定義生產者與消費者的序列化與反序列化工具。並訂立group.id給Consumer用來分群、以及auto-offset-reset=earliest 代表當Kafka Consumer啟動且在Group中找不到現有的偏移量時,在Kafka重新啟動或新加入Group時能從最早的資料開始處理。
# Kafka broker 地址
spring.kafka.bootstrap-servers=localhost:9092
# 消費者配置
spring.kafka.consumer.group-id=my-group
spring.kafka.consumer.auto-offset-reset=earliest
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
接著定義Kafka 接收訊息的設定,這邊定義了接收訊息的TOPIC以及GroupId。
@Service
public class KafkaConsumer {
@KafkaListener(topics = "my_topic", groupId = "my-group")
public void consume(String message) {
System.out.println("接收到的訊息: " + message);
}
}
最後加入Producer與Consumer。
@Service
public class KafkaProducer {
private static final String TOPIC = "my_topic";
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
public void sendMessage(String message) {
kafkaTemplate.send(TOPIC, message);
}
}
@RestController
public class KafkaController {
@Autowired
private KafkaProducer kafkaProducer;
@GetMapping("/send")
public String sendMessage(@RequestParam("message") String message) {
kafkaProducer.sendMessage(message);
return "已發送訊息: " + message;
}
}
透過以上的設定,你應該可以自行建立出一個Kafka Server了
那麼今天的介紹就到這邊了,我們明天見吧。
參考資料:
Apache Kafka 介紹. Data really powers everything that we… | by Chi-Hsuan Huang | Medium
Apache Kafka 是什麼?核心元件、優勢、常見使用案例一次看! - 歐立威科技 (omniwaresoft.com.tw)
什麼是 Apache Kafka?| Google Cloud