Kafka 入门到起飞 - Kafka怎么做到保障消息不会重复消费的? 消费者组是什么?

Kafka通过消费者组和分区机制避免消息重复消费,每个分区仅由一个消费者消费。消费者组内的消费者可以横向扩展,通过再平衡机制分担负载,提高消费速度。消费者数通常等于分区数以优化并行消费,过多消费者可能导致资源浪费。不同消费者组可独立获取主题数据。
摘要由CSDN通过智能技术生成

Kafka怎么做到避免消息重复消费的? 消费者组是什么?

消费者

1、订阅Topic(主题)
2、从订阅的Topic消费(pull)消息,
3、将消费消息的offset(偏移量)保存在Kafka内置的一Topic名字是_consumer_offsets的主题中,在Kafka的logs文件下能看到这👟文件,存放的是消息的偏移量数据
在这里插入图片描述

消费者组

在这里插入图片描述

1、订阅同一个Topic的消费者可以加入到一个consumer Group(消费者组)
2、消费者组中的consumer共享一个group_idconfigs,put(“group.id”,”XXX”);只要消费者的group_id一样,就属于同一个消费者组
3、消费者组保证每个topic下一个partition的消息只能被一个消费者组下一个消费者消费,避免消息的重复消费
如上图,当前只有一个消费者组订阅这个Topic,消费者组里只有一个消费者,那么当前Topic中所有分区的消息都由这个消费者消费
4、当消费者端业务逻辑比较复杂,消费消息比较慢,这个时候我们可以向消费者组中多加几个消费者(横向扩展)来提升消费速度。无非就是消费者端一套代码再在几台新的服务器部署一套,加入到同一个group_id下,同时从主题消费消息
横向扩展后,Kafka会对消息的分区与消费者的对应关系重新调整,这就是rebalance(再平衡机制)
在这里插入图片描述
如上图,消费者组扩展一个消费者后,消费者1、2分别消费两个分区的消息
我们可以看到,一个分区对应一个消费者,但是一个消费者可以对应多个分区

如果上面结构还不够,两个消费者消费速度依然跟不上,那么我们还可以继续添加消费者,添加到4个消费者,此时主题分区与消费者的关系再次发生变化,需要再平衡,此时一个消费者消费一个分区消息,达到并行消费的效果
在这里插入图片描述

上面步骤我们看到了消息的分区可以横向扩展,消息的消费者也可以横向扩展,向消费者组添加消费者是横向扩展消费能力的主要方式,而消费者组是消费者的关键,消费者组来保证,主题下的消息不管由多少个分区,每条消息只会被一个消费者消费,就不会引起重复消费的情况

一般最佳情况是:消费者数 = 分区数,一个分区对应一个消费者,
消费者也不是越多越好,消费者数受限于分区数, 过多消费者会导致有的消费者没有分配分区导致空闲,如下图
在这里插入图片描述
所以对于高并发的场合,我们通常会给一个主题设置很多个分区,分区数多利于消费者横向扩张


上面是一个消费者组的情况,实际上对于一个Topic可以有不同的消费者组,如下图
在这里插入图片描述

  • 每个消费者组是相互独立的
  • 每个消费者组都可以拿到主题的全部数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值