kafka 生产者和消费者
同一则消息record可以被多个消费者消费consumer
在kafka中任意一个消费者一定属于某一个消费组consumer group
发布到Topic的每条记录都会传递到每个订阅Consumer Group中的一个消费者实例,如果所有Consumer实例都具有相同的Consumer Group,
那么Topic中的记录会在该ConsumerGroup中的Consumer实例进行均分消费;如果所有Consumer实例具有不同的ConsumerGroup,则每条记录将广播到所有Consumer Group进程。
简而言之就是 订阅了该topic的consumerGroup 会将record均分给组中的所有consumer
若多个consumerGroup订阅了该topic,那么record会均分给多个consumerGroup

对于kafka而言,发送到topic中的消息一定会发送给consumerGroup,但是发给consumerGroup中的哪一个消费者实例,取决于消费者实例的配
更常见的是,我们发现Topic具有少量的Consumer Group,每个Consumer Group可以理解为一个“逻辑的订阅者”。
每个Consumer Group均由许多Consumer实例组成,以实现可伸缩性和容错能力。这无非就是发布-订阅模型,
其中订阅者是消费者的集群而不是单个进程。这种消费方式Kafka会将Topic按照分区的方式均分给一个Consumer Group下的实例,
如果ConsumerGroup下有新的成员介入,则新介入的Consumer实例会去接管ConsumerGroup内其他消费者负责的某些分区,
在·同样如果一下ConsumerGroup下的有其他Consumer实例宕机,则由改ConsumerGroup其他实例接管。
不同的消费组,代表不同的业务系统,或者不同的服务,消费组a和消费组b中消费同一个record,消费的业务逻辑不同,不存在重复消费
就topic而言,谁订阅了topic,就把里面所有的record广播给所有消费者
就消费者而言,订阅了topic,里面的数据recore会均分给消费组中的消费者。
一般消费组中的消费者数目不会大于topic中的分区partion数目,
若消费者数目大于partion数目,那个多余的消费者 将不会分配到record数据,浪费资源
增大kafka中topic分区,不仅仅可以增加存储能力,增加写入能力,也可以增加消费者对topic中数据record 消费能力
由于Kafka的Topic的分区策略,因此Kafka仅提供分区中记录的有序性,也就意味着相同Topic的不同分区记录之间无顺序。
因为针对于绝大多数的大数据应用和使用场景, 使用分区内部有序或者使用key进行分区策略已经足够满足绝大多数应用场景。
但是,如果您需要记录全局有序,则可以通过只有一个分区Topic来实现,尽管这将意味着每个ConsumerGroup只有一个Consumer进程。
分区数越大,写入性能越高,并行消费越大
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端