【工作中问题解决实践 十一】Kafka消费者消费堆积且频繁rebalance

简介: 【工作中问题解决实践 十一】Kafka消费者消费堆积且频繁rebalance

最近有点不走运,老是遇到基础服务的问题,还是记着点儿解决方法,以后再遇到快速解决吧,今天遇到这个问题倒不算紧急,但也能通过这个问题熟悉一下Kafka的配置。

问题背景

正在开会的时候突然收到一连串的报警,赶忙看看是为啥

没过一会儿基础服务报警也来了

告警名称:Kafka-topic consume exception
识别号:xxxxx
状态:firing 
开始时间:2023-08-09 19:28:05
当前时间:2023-08-09 19:28:05
Summary:Kafka Cluster: common-xxxx-xx Topic: { xxxxxxx-prod } Group:xxxxxxx-prod Status: STALL
Description: 诊断报告

报警标识

Kafka 自身的异常状态的枚举:

  1. Leader Not Available (LEADER_NOT_AVAILABLE): 当尝试读取或写入一个分区时,分区的 Leader 副本不可用。
  2. Replica Not Available (REPLICA_NOT_AVAILABLE): 当尝试读取或写入一个分区时,分区的副本不可用。
  3. Request Timeout (REQUEST_TIMED_OUT): 请求在指定的时间内没有得到响应,可能是因为网络延迟、负载过重等原因。
  4. Offset Out of Range (OFFSET_OUT_OF_RANGE): 尝试读取一个不存在的偏移量。
  5. Invalid Offset (INVALID_OFFSET): 提供了无效的偏移量。
  6. Unknown Topic or Partition (UNKNOWN_TOPIC_OR_PARTITION): 尝试访问不存在的主题或分区。
  7. Record Too Large (RECORD_TOO_LARGE): 尝试写入的记录大小超过了 broker 配置的最大记录大小。
  8. Not Enough Replicas (NOT_ENOUGH_REPLICAS): 写入操作无法满足分区的最小副本数配置。
  9. Message Size Too Large (MESSAGE_TOO_LARGE): 尝试写入的消息大小超过了 broker 配置的最大消息大小。
  10. Topic Authorization Failed (TOPIC_AUTHORIZATION_FAILED): 消费者或生产者没有足够的权限来访问指定的主题。
  11. Group Authorization Failed (GROUP_AUTHORIZATION_FAILED): 消费者群组没有足够的权限来访问指定的群组。
  12. Offset Metadata Too Large (OFFSET_METADATA_TOO_LARGE): 提供的偏移量元数据超过了 broker 配置的最大大小。
  13. Connection Error (CONNECTION_ERROR): 与 broker 的连接遇到问题,可能是网络故障或 broker 宕机等原因。
  14. Unknown Error (UNKNOWN_ERROR): 未知的错误,可能是由于 Kafka 内部问题引起的。

这些异常状态可以在 Kafka 的客户端和服务端之间的交互中出现,通常会在日志或异常堆栈跟踪中得到体现

基于Kafka-topic_consume_exception策略,一般对于分区状态的依据kafka的报警状态枚举:

  1. NotFound 状态:这个consumer group 不存在
  2. OK 状态:正常消费
  3. Warning 状态:有一个或多个分区正在延迟,当前在消费,但是消费延迟越来越大
  4. Error 状态:有一个或多个分区已经处于STOP,STALL,Rewind等几种状态之一
  5. Stop 状态:消费者已经有一段时间没有提交offset了,并且消费延迟非0
  6. Stall 状态:消费者正在提交offset,但是offset没有增加,并且消费延迟非0
  7. Rewind 状态:消费者提交了一个比之前还早的offset

ok,Stall状态结合监控异常,我们发现应该是一批次提交的数量太多处理不完了,可以通过增加批次处理间隔或减少批次数量避免延迟消费

问题原因

配置举例: max.poll.records = 20,而 max.poll.interval.ms = 1000,也就是说consumer一次最多拉取 20 条消息,两次拉取的最长时间间隔为 1 秒。也就是说消费者拉取的20条消息必须在1秒内处理完成,紧接着拉取下一批消息。否则,超过1秒后,kafka broker会认为该消费者处理太缓慢而将他踢出消费组,从而导致消费组rebalance。根据kafka机制,消费组rebalance过程中是不会消费消息的。所以看到三台机器轮流拉取消息,又轮流被踢出消费组,消费组循环进行rebalance,消费就堆积了

标准指标

生产者的一些参数指标

消费者的一些参数指标

问题解决

明确问题原因后,很好解决,把一批的最大拉取数量调小即可:spring.kafka.consumer.max-poll-records,比默认值500多小一点,调整完配置上线后就解决了,消费延迟很快降低到0了

总结一下

照例总结一下,虽然基础服务的一些中间件一般都由基础架构部门维护,但还是要对这些中间件的配置和使用要有所了解,这样出了问题才能快速定位问题、解决问题,避免影响线上稳定性

相关文章
|
23天前
|
消息中间件 存储 监控
构建高可用性Apache Kafka集群:从理论到实践
【10月更文挑战第24天】随着大数据时代的到来,数据传输与处理的需求日益增长。Apache Kafka作为一个高性能的消息队列服务,因其出色的吞吐量、可扩展性和容错能力而受到广泛欢迎。然而,在构建大规模生产环境下的Kafka集群时,保证其高可用性是至关重要的。本文将从个人实践经验出发,详细介绍如何构建一个高可用性的Kafka集群,包括集群规划、节点配置以及故障恢复机制等方面。
58 4
|
23天前
|
消息中间件 存储 负载均衡
Apache Kafka核心概念解析:生产者、消费者与Broker
【10月更文挑战第24天】在数字化转型的大潮中,数据的实时处理能力成为了企业竞争力的重要组成部分。Apache Kafka 作为一款高性能的消息队列系统,在这一领域占据了重要地位。通过使用 Kafka,企业可以构建出高效的数据管道,实现数据的快速传输和处理。今天,我将从个人的角度出发,深入解析 Kafka 的三大核心组件——生产者、消费者与 Broker,希望能够帮助大家建立起对 Kafka 内部机制的基本理解。
54 2
|
3月前
|
消息中间件 负载均衡 大数据
揭秘Kafka背后的秘密!再均衡如何上演一场消费者组的‘权力游戏’,让消息处理秒变高能剧情?
【8月更文挑战第24天】Kafka是一款在大数据处理领域备受推崇的产品,以其出色的性能和可扩展性著称。本文通过一个具体案例介绍其核心机制之一——再均衡(Rebalancing)。案例中,“user_activity”主题下10个分区被3个消费者均衡消费。当新消费者加入或原有消费者离开时,Kafka将自动触发再均衡过程,确保所有消费者能有效处理分配给它们的分区。
136 62
|
3月前
|
消息中间件 Kafka API
【Kafka消费新风潮】告别复杂,迎接简洁之美——深度解析Kafka新旧消费者API大比拼!
【8月更文挑战第24天】Apache Kafka作为一个领先的分布式流处理平台,广泛用于实时数据管道和流式应用的构建。随着其发展,消费者API经历了重大更新。旧消费者API(包括“低级”和“高级”API)虽提供灵活性但在消息顺序处理上存在挑战。2017年引入的新消费者API简化了接口,自动管理偏移量,支持更强大的消费组功能,显著降低了开发复杂度。通过对比新旧消费者API的代码示例可以看出,新API极大提高了开发效率和系统可维护性。
133 58
|
1月前
|
消息中间件 SQL 分布式计算
大数据-76 Kafka 高级特性 稳定性-消费重复 生产者、Broker、消费者 导致的重复消费问题
大数据-76 Kafka 高级特性 稳定性-消费重复 生产者、Broker、消费者 导致的重复消费问题
35 1
|
3月前
|
消息中间件 负载均衡 Kafka
【Kafka消费秘籍】深入了解消费者组与独立模式,掌握消息消费的两种超能力!
【8月更文挑战第24天】Apache Kafka是一款高性能的分布式消息系统,支持灵活多样的消费模型以适应不同的应用场景。消息按主题组织,每个主题可划分为多个分区,确保消息顺序性。本文深入探讨了Kafka中的两大核心消费模式:消费者组(Consumer Group)和独立消费者(Standalone Consumer)。消费者组允许多个消费者协同工作,实现负载均衡及故障恢复,是最常用的消费模式。独立消费者模式则适用于需要高度定制化处理逻辑的场景,如消息重放等。通过对比这两种模式的特点和提供的示例代码,开发者可以根据具体需求选择最合适的消费策略,从而更好地利用Kafka构建高效的数据流应用程序。
93 3
|
3月前
|
分布式计算 搜索推荐 物联网
大数据及AI典型场景实践问题之通过KafKa+OTS+MaxCompute完成物联网系统技术重构如何解决
大数据及AI典型场景实践问题之通过KafKa+OTS+MaxCompute完成物联网系统技术重构如何解决
|
3月前
|
消息中间件 负载均衡 Kafka
Kafka 实现负载均衡与故障转移:深入分析 Kafka 的架构特点与实践
【8月更文挑战第24天】Apache Kafka是一款专为实时数据处理和流传输设计的高性能消息系统。其核心设计注重高吞吐量、低延迟与可扩展性,并具备出色的容错能力。Kafka采用分布式日志概念,通过数据分区及副本机制确保数据可靠性和持久性。系统包含Producer(消息生产者)、Consumer(消息消费者)和Broker(消息服务器)三大组件。Kafka利用独特的分区机制实现负载均衡,每个Topic可以被划分为多个分区,每个分区可以被复制到多个Broker上,确保数据的高可用性和可靠性。
77 2
|
3月前
|
消息中间件 存储 算法
时间轮在Kafka的实践:技术深度剖析
【8月更文挑战第13天】在分布式消息系统Kafka中,时间轮(Timing Wheel)作为一种高效的时间调度机制,被广泛应用于处理各种延时操作,如延时生产、延时拉取和延时删除等。本文将深入探讨时间轮在Kafka中的实践应用,解析其技术原理、优势及具体实现方式。
126 2
|
3月前
|
消息中间件 安全 Kafka
"深入实践Kafka多线程Consumer:案例分析、实现方式、优缺点及高效数据处理策略"
【8月更文挑战第10天】Apache Kafka是一款高性能的分布式流处理平台,以高吞吐量和可扩展性著称。为提升数据处理效率,常采用多线程消费Kafka数据。本文通过电商订单系统的案例,探讨了多线程Consumer的实现方法及其利弊,并提供示例代码。案例展示了如何通过并行处理加快订单数据的处理速度,确保数据正确性和顺序性的同时最大化资源利用。多线程Consumer有两种主要模式:每线程一个实例和单实例多worker线程。前者简单易行但资源消耗较大;后者虽能解耦消息获取与处理,却增加了系统复杂度。通过合理设计,多线程Consumer能够有效支持高并发数据处理需求。
171 4
下一篇
无影云桌面