概述
传统的消息传递模式有2种:队列( queue) 和(publish-subscribe)
- queue模式:多个consumer从服务器中读取数据,消息只会到达一个consumer
- publish-subscribe模式:消息会被广播给所有的consumer
Kafka基于这2种模式提供了一种consumer的抽象概念: consumer group
- queue模式:所有的consumer都位于同一个consumer group 下。
- **publish-subscribe模式:**所有的consumer都有着自己唯一的consumer group

说明: 由2个broker组成的kafka集群,某个主题总共有4个partition(P0-P3),分别位于不同的broker上。这个集群由2个Consumer Group消费, A有2个consumer instances ,B有4个。
通常一个topic会有几个consumer group,每个consumer group都是一个逻辑上的订阅者( logicalsubscriber )。每个consumer group由多个consumer instance组成,从而达到可扩展和容灾的功能。
广播模式的应用 ----> 应用里缓存了数据字典等配置表在内存中,可以通过 Kafka 广播消费,实现每个应用节点都消费消息,刷新本地内存的缓存。
Code

POM依赖
1 | <dependencies> |
复制
配置文件
1 | spring: |
复制
auto-offset-reset: latest 广播模式,一般情况下,无需消费历史的消息,从订阅的 Topic 的队列的尾部开始消费即可
生产者
1 | package com.artisan.springkafka.producer; |
复制
消费者
1 | package com.artisan.springkafka.consumer; |
复制
注意: groupId 通过 Spring EL 表达式,在每个消费者分组的名字上配合 UUID 生成其后缀。这样,就能保证每个项目启动的消费者分组不同,从而达到广播消费的目的。
单元测试
1 | package com.artisan.springkafka.produceTest; |
复制
启动多次单元测试, 观察消息的接受情况
测速结果

可以看到不消费组下的 消费者(目前是一个消费组下一个消费者) 均收到了 这条消息,这就是广播模式
源码地址
https://github.com/yangshangwei/boot2/tree/master/springkafkaBroadCast