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

相关文章

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

IDEA中的Kafka管理神器详解

《IDEA中的Kafka管理神器详解》这款基于IDEA插件实现的Kafka管理工具,能够在本地IDE环境中直接运行,简化了设置流程,为开发者提供了更加紧密集成、高效且直观的Kafka操作体验... 目录免安装:IDEA中的Kafka管理神器!简介安装必要的插件创建 Kafka 连接第一步:创建连接第二步:选

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

SprinBoot+Vue网络商城海鲜市场的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质创作者,全网30w+

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件filename = 'your_file.nc'; % 替换为你的文件名% 使用 netcdf.open 函数打开文件ncid = netcdf.open(filename, 'NC_NOWRITE');% 查看文件中的组% 假设我们想读取名为 "group1" 的组groupName

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

Spring的设计⽬标——《Spring技术内幕》

读《Spring技术内幕》第二版,计文柯著。 如果我们要简要地描述Spring的设计⽬标,可以这么说,Spring为开发者提供的是⼀个⼀站式的轻量级应⽤开发框架(平台)。 作为平台,Spring抽象了我们在 许多应⽤开发中遇到的共性问题;同时,作为⼀个轻量级的应⽤开发框架,Spring和传统的J2EE开发相⽐,有其⾃⾝的特点。 通过这些⾃⾝的特点,Spring充分体现了它的设计理念:在