文章目录

  • kafka消息细节
  • 消息的储存
  • 单播消息
  • 多播消息
  • 两者区别

kafka消息细节



消息的储存



  • ⽣产者将消息发送给broker,broker会将消息保存在本地的⽇志⽂件中。
  • 消息的保存是有序的,通过offset偏移量来描述消息的有序性。
  • 消费者消费消息时也是通过offset来描述当前要消费的那条消息的位置。

spring boot kafka广播模式 kafka 广播消息_bootstrap


单播消息



在⼀个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

spring boot kafka广播模式 kafka 广播消息_单播_02


然后查看消费者终端:

spring boot kafka广播模式 kafka 广播消息_单播_03


可以发现,只有一个消费者消费到了消息。


多播消息



不同的消费组订阅同⼀个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

spring boot kafka广播模式 kafka 广播消息_单播_02


查看消费者终端:

spring boot kafka广播模式 kafka 广播消息_单播_05


可以发现,两个消费者都消费到了消息。

两者区别

下图就是描述多播和单播消息的区别:

spring boot kafka广播模式 kafka 广播消息_分布式_06