文章目录
- kafka消息细节
- 消息的储存
- 单播消息
- 多播消息
- 两者区别
kafka消息细节
消息的储存
- ⽣产者将消息发送给broker,broker会将消息保存在本地的⽇志⽂件中。
- 消息的保存是有序的,通过offset偏移量来描述消息的有序性。
- 消费者消费消息时也是通过offset来描述当前要消费的那条消息的位置。
单播消息
在⼀个kafka的topic中,启动两个消费者,⼀个⽣产者,问:⽣产者发送消息,这条消息是否同时会被两个消费者消费?
如果多个消费者在同⼀个消费组,那么只有⼀个消费者可以收到订阅的topic中的消息。换⾔之,同⼀个消费组中只能有⼀个消费者收到⼀个topic中的消息。
首先在test1主题中建立一个生产者:
./kafka-console-producer.sh --broker-list 127.0.0.1:9093 --topic test1
然后在test1主题中建立两个消费者,两个消费者位于同一个消费者组:
./kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9093 --consumer-property group.id=testGroup --topic test1
./kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9093 --consumer-property group.id=testGroup --topic test1
接着在生产者中生产一条消息:
>give you resources
然后查看消费者终端:
可以发现,只有一个消费者消费到了消息。
多播消息
不同的消费组订阅同⼀个topic,那么不同的消费组中只有⼀个消费者能收到消息。实际上也是多个消费组中的多个消费者收到了同⼀个消息。
还是上述那个生产者,然后我们创建两个消费者,但是这次两个消费者位于不同的消费者组:
./kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9093 --consumer-property group.id=testGroup1 --topic test1
./kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9093 --consumer-property group.id=testGroup2 --topic test1
生产者生产一条消息:
>give you resources
查看消费者终端:
可以发现,两个消费者都消费到了消息。
两者区别
下图就是描述多播和单播消息的区别: