kafka consumer group设计的巧妙以及讨厌的rebalance

2024-02-27 01:18

本文主要是介绍kafka consumer group设计的巧妙以及讨厌的rebalance,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 一.consumer group的特性
      • 二.特性导致的好处
      • 三.每个group如何管理它的offset
      • 四.Rebalance

一.consumer group的特性

  • consumer group下可能有一个或多个consumer实例
  • group ID是一个字符串,在一个kafka集群中,它标识唯一的consumer group
  • 一个consumer group下面的实例只能消费一个主题的分区,当然这个分区也能被其它consumer group消费

二.特性导致的好处

由上面三个特性,我们能想到kafka consumer group这个机制却实现了传统消息系统的两大模型:**如果所有实例都属于同一个group,那么此时kafka就是消息队列模型;如果所有实例都分别属于不同的的group,那么此时kafka就是一个发布订阅模型。**理想情况下,consumer实例的数量应该等于group订阅主题的分区总数。

三.每个group如何管理它的offset

我们都知道offset是记录分区消费位置信息,对于consumer group而言,可以简单理解为一个Map<TopicPartition,long>的数据结构。那么问题来了,这个会频繁变动的offset值保存在哪里呢?
在老版本的时候,offset是保存在zookeeper,这样做最显而易见的做法是减少了broker的端保存的开销,但是zookeeper这个中间件其实是不适合做这种频繁的操作的,这种大量的操作会严重拖慢zookeeper的性能。后来社区重新设计了_consumer_offsets这样一个内部主题来管理offsets。
_consumer_offsets主要是保存kafka消费者的位移信息,它需要这个过程不仅要实现高可用性,更需要高频的写,那么其实kafka的主题设计天然满足这两个需求,位移主题的key应该包括三部分内容–<groupId,主题名,分区号>,这样就很容易找到当前group消费某主题下的某个分区的offset值。

四.Rebalance

rebalance本质上是一种协议,规定了一个consumer group下的所有consumer如何达成一致,来分配订阅topic的每个分区。
kafka触发rebalance的条件有三个:

  • 1.consumer group实例的变化。比如新的consumer加入组或者老的consumer离开组,以及consumer意外崩溃离开组
  • 2.consumer group订阅的主题数目发生变更。比如通过正则表达式订阅主题,有新的主题加入的时候自动订阅这个主题数。
  • 3.分区数的变化。
    rebalance发生的时候,consumer group下的consumer都会协调在一起共同参与,尽最大努力保持每个consumer实例获取到较为公平的分区数。但是rebalance的时候所有的consumer实例都会停止消费,导致rebalance完成,如果你的consumer group实例特别多的话,一次rebalance的时间会非常长,这个代价难以想象,而社区对于这个现象无能为力,最好的办法就是通过好的设计以及预防措施防止group进行rebalance。

【微信搜索:焗个面包,没有太多干货,希望有点温度】
在这里插入图片描述

这篇关于kafka consumer group设计的巧妙以及讨厌的rebalance的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/750773

相关文章

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

mysql中的group by高级用法详解

《mysql中的groupby高级用法详解》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,本文给大家介绍mysql中的groupby... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

mysql中的group by高级用法

《mysql中的groupby高级用法》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,下面给大家介绍mysql中的groupby用法... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

一文详解kafka开启kerberos认证的完整步骤

《一文详解kafka开启kerberos认证的完整步骤》这篇文章主要为大家详细介绍了kafka开启kerberos认证的完整步骤,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、kerberos安装部署二、准备机器三、Kerberos Server 安装1、配置krb5.con

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D