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

相关文章

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

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

MySQL报错sql_mode=only_full_group_by的问题解决

《MySQL报错sql_mode=only_full_group_by的问题解决》本文主要介绍了MySQL报错sql_mode=only_full_group_by的问题解决,文中通过示例代码介绍的非... 目录报错信息DataGrip 报错还原Navicat 报错还原报错原因解决方案查看当前 sql mo

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Kafka拦截器的神奇操作方法

《Kafka拦截器的神奇操作方法》Kafka拦截器是一种强大的机制,用于在消息发送和接收过程中插入自定义逻辑,它们可以用于消息定制、日志记录、监控、业务逻辑集成、性能统计和异常处理等,本文介绍Kafk... 目录前言拦截器的基本概念Kafka 拦截器的定义和基本原理:拦截器是 Kafka 消息传递的不可或缺

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

如何在一台服务器上使用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