kafka重复消费问题分析和解决

本文介绍了Kafka的队列分区、消费者组、重平衡机制及其触发条件,详细阐述了重平衡过程中的Generation概念。针对重平衡可能导致的重复消费问题,提出了通过实现函数幂等性和调整参数来避免。同时,讨论了ConsumerRebalanceListener在解决重复消费中的作用。相关链接提供了深入阅读资料。
摘要由CSDN通过智能技术生成

名词解释

名词 解释
Producer 消息的生成者
Consumer 消息的消费者
ConsumerGroup 消费者组,可以并行消费Topic中的partition的消息
Broker 缓存代理,Kafka集群中的一台或多台服务器统称broker.
Topic Kafka处理资源的消息源(feeds of messages)的不同分类
Partition Topic物理上的分组,一个topic可以分为多个partion,每个partion是一个有序的队列。partion中每条消息都会被分 配一个 有序的Id(offset)
Message 消息,是通信的基本单位,每个producer可以向一个topic(主题)发布一些消息
Coordinator Coordinator一般指的是运行在broker上的group Coordinator,用于管理Consumer Group中各个成员,每个KafkaServer都有一个GroupCoordinator实例,管理多个消费者组,主要用于offset位移管理和Rebalance

kafka 队列分区

topic 队列 与 partition 分区

  • topic是逻辑概念,partition是物理概念
  • partition对用户是透明的,producer只需要关心把消息发送到哪一个topic,而consumer只需要订阅自己的topic即可

优势

  • 水平拓展,如果topic的数据都存在一个broker上,这个节点的性能就是瓶颈,无法做到水平扩展。
  • 这样,producer可以将数据发送给多个broker上的多个partitionconsumer也可以并行从多个broker上的不同paritition上读数据,实现了水平扩展

kafka 消费者组

Consumer 消费者 与 ConsumerGroup 消费者组

  • group id相同的消费者Consumer,是一个消费者组ConsumerGroup
  • 组内所有消费者Consumer,协调在一起来消费订阅队列topic中的所有分区partition
  • 每个分区partition只能由同一个消费组ConsumerGroup内的一个consumer来消费

消费者 与 分区

  1. 队列T1 有4个分区(0-3),消费者组G1有一个消费者实例C1C1会消费所有分区中的消息
    在这里插入图片描述

  2. G1新增消费者实例C2,那么每个消费者将会分别收到两个分区的消息
    在这里插入图片描述

  3. G1增加到四个消费者,这时,每个消费者接收一个分区的消息
    在这里插入图片描述

  4. 但如果我们继续增加消费者到这个消费组,剩余的消费者将会空闲,不会收到任何消息
    在这里插入图片描述

kafka 重平衡

重平衡 Rebalance

  • 重平衡rebalance本质上是一组协议,规定了一个消费者组ConsumerGroup下的所有消费者consumer如何达成一致来分配订阅队列topic的每个分区partition
  • 上面介绍消费者与分区时,G1增加了消费者,kafka就会重新分配每个分区和消费者的对应关系。这个分配的过程就叫rebalance

Rebalance触发时机

  • 分区partition个数的增加,手动新增队列的分区
  • Topic的订阅发生变化,使用正则订阅topic,新增的topic符合正则规则
  • ConsumerGroup组成员发生变更(常见问题)
    • 新的Consumer入组
    • 已有Consumer离开组或者崩溃
    • 消费过慢,导致kafka以为Consumer挂了,导致重平衡(重点问题)

Rebalance 过程

Rebalance Generation

它表示了rebalance之后的一届成员,主要是用于保护consumer group,隔离无效offset提交的。比如上一届的consumer成员是无法提交位移到新一届的consumer group中。这也是为什么Rebalance会导致重复消费的原因。
每次group进行rebalance之后,generation号都会加1,表示group进入到了一个新的版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值