介绍

消费组使kafka中很重的概念,只有弄清楚消费组的概念,才能在项目中把它运用好,在kafka中,每个消费者都对应一个消费组,消费者可以是一个线程,一个进程,一个服务实例,如果kafka想要消费消息,那么需要指定消费那个topic的消息以及自己的消费组id(groupId),也可以直接指定那个主题的哪些分区,不然无法消费消息,消费组是一个逻辑上的概念,如下图是主题,分区,消费组,消费者的关系图。

从上图看出都两个消费组,分别为消费组a和消费组b,消费组a有三个消费者c1,c2,c3,其中c1消费分区1,c2消费分区2,c3消费分区3和分区4,消费组b有c4和恶c5两个消费者,c4消费分区1和分区2,c5消费分区3和分区4,我们可以看出,一个消费组内的消费者可以同时消费一个或者几个分区,反之,一个分区只能被同一个消费组内的消费者消费

消费组增加消费者

此时我们在消费组a中添加了一个消费者c6,我们看到,原来的c3消费分区3和分区4,现在c3只消费分区4,把分区4让给了c6去消费,由此可以看出kafka会使消费者平均消费分区。

继续在消费组a中增加一个消费者c7,如下图,那么由于消费组a中的每个消费者都订阅了一个分区,因为秉承一个分区只能被同一个消费组内的一个消费者消费的原则,四个分区刚好对应4个消费者,所以c7消费者就只能空闲下来。

消费模式

从上面的消费组的一些介绍,我们就可以引申出消息中间件的消费模式,我们知道消息中间件的消费模式有发布订阅模式点对点模式,在不同的场景下使用的消费模式也不一样,这样根据我们的业务需求去选择,下面我们消息介绍一下这两种模式。

发布订阅模式

发布订阅模式顾名思义就是生产者发布消息以后,消费者订阅对应的主题分区,然后进行消费,它是一对多的,就像学校的在广播里面通知,所有的学生都能听到,还有微信的订阅号,一个订阅号会有很多人关注,当订阅号的号主发布一篇文章,关注的人都能收到。

那么在kafka中,怎么做发布订阅模式呢?很简单,就是不同的消费组就能实现发布订阅模式,在上面我们说了一个分区只能被同一个消费组内的消费者消费,那么我们使用不同的消费组的消费者消费同一个分区就行了,这就实现了发布订阅模式,如下图,有三个消费组a,b,c的消费者c1,c2,c3消费同一个分区,在kafka中使用groupId来表示消费组,如果所有的消费者的groupId都设置一样,那么他们就属于同一个消费组。

发布订阅模式的应用场景有很多,比如下游有很多服务都需要使用同一份数据,如果通过编码的方式来实现的话,可以通过RPC方式来调用,但是就会造成系统的耦合,使用消息中间件的话,上游只管投递消息,下游服务订阅后,就可以消费到消息,大大降低了耦合。

点对点模式

点对点模式就是一对一模式,现实生活中我们打电话,私聊都属于点对点模式,在kafka中要使用点对点模式,那么我们还是要回到一个分区只能被同一个消费组内的消费者消费这个问题,那么我们就创建一个消费组,每个分区的数据只能被这个消费组内的消费者消息,就实现了点对点模式。

点对点的应用场景也很多,因为它的数据只能被一个消费者使用,比如可以削峰,比如上游服务发送了很多数据过来,如果下游服务的就只有一个消费者实例,那么就可能造成消息的积压,这时候就可以多开几个消费者实例一起消费,就加快了消息的消费速度,不过也得考虑一些因素,比如消息的顺序。

总结

上面对消费组和消费者进行了详细的图文介绍,也引申出了消费模式的发布订阅模式,点对点模式,并说了一些应用场景,在实际使用的时候,我们需要根据自己的业务去衡量需要多少消费者,消费者与主题分区之间的数量规划等等,对于kafka的参数调优啊,消息的顺序消费,消息的丢失,重复消费等问题,后续我们再继续。

感谢你的观看,我们下期见,如果文中有说得不合理或者不正确的地方,希望你能进行指点!

聊一下kafka的消费组的更多相关文章

  1. kafka 消费组功能验证以及消费者数据重复数据丢失问题说明 3

    原创声明:作者:Arnold.zhao 博客园地址:https://www.cnblogs.com/zh94 背景 上一篇文章记录了kafka的副本机制和容错功能的说明,本篇则主要在上一篇文章的基础上 ...

  2. Kafka消费组(consumer group)

    一直以来都想写一点关于kafka consumer的东西,特别是关于新版consumer的中文资料很少.最近Kafka社区邮件组已经在讨论是否应该正式使用新版本consumer替换老版本,笔者也觉得时 ...

  3. Kafka 0.11新功能介绍:空消费组延迟rebalance

    Kafka 0.11新功能介绍:空消费组延迟rebalance 在0.11之前的版本中,多个consumer实例加入到一个空消费组将导致多次的rebalance,这是由于每个consumer inst ...

  4. Kafka技术内幕 读书笔记之(五) 协调者——消费组状态机

    协调者保存的消费组元数据中记录了消费组的状态机 , 消费组状态机的转换主要发生在“加入组请求”和“同步组请求”的处理过程中 .协调者处理“离开消费组请求”“迁移消费组请求”“心跳请求” “提交偏移量请 ...

  5. Kafka技术内幕 读书笔记之(五) 协调者——消费者加入消费组

    消费者客户端轮询的3个步骤:发送拉取请求,客户端轮询,获取拉取结果 . 消费者在发送拉取请求之前,必须首先满足下面的两个条件.- 确保消费者已经连接协调者, 即找到服务端中管理这个消费者的协调者节点 ...

  6. kafka中的消费组

    一直以来都想写一点关于kafka consumer的东西,特别是关于新版consumer的中文资料很少.最近Kafka社区邮件组已经在讨论是否应该正式使用新版本consumer替换老版本,笔者也觉得时 ...

  7. Kafka 0.11版本新功能介绍 —— 空消费组延时rebalance

    在0.11之前的版本中,多个consumer实例加入到一个空消费组将导致多次的rebalance,这是由于每个consumer instance启动的时间不可控,很有可能超出coordinator确定 ...

  8. Kafka设计解析(十三)Kafka消费组(consumer group)

    转载自 huxihx,原文链接 Kafka消费组(consumer group) 一直以来都想写一点关于kafka consumer的东西,特别是关于新版consumer的中文资料很少.最近Kafka ...

  9. kafka消费组、消费者

    consumer group consumer instance 一个消费组可能有一个或者多个消费者.同一个消费组可以订阅一个或者多个主题.主题的某一个分区只能被消费组的某一个消费者消费.那么分区和消 ...

  10. Kafka 消费组消费者分配策略

    body { margin: 0 auto; font: 13px / 1 Helvetica, Arial, sans-serif; color: rgba(68, 68, 68, 1); padd ...

随机推荐

  1. 云原生架构(二)环境搭建(Mac上安装Docker+Kubernetes+Istio一条龙)

    一.背景 Istio 项目由 Google 和 IBM 的团队与 Lyft 的 Envoy 团队合作启动.它已经完全在 GitHub 上公开开发.目前已经是"Service Mesh服务网格 ...

  2. 常用内置模块os sys json

    今日内容回顾 目录 今日内容回顾 os模块 sys模块 json模块 json模块实战 os模块 sys模块 json模块 os模块 os模块主要与代码运行的操作系统打交道 1.创建目录(文件夹) i ...

  3. ping localhost时出现::1的原因以及解决办法

    ping localhost时出现: 在cmd中ping localhost解析出来的是ipv6的::1的原因是windows有个优先解析列表,当ipv6的优先级高于ipv4时,就会出现这种情况. 具 ...

  4. elementui中 分页在vue中的使用

     template中: <el-pagination background layout="prev, pager, next" :total="total&quo ...

  5. Python从入门到精通(第2版)——pyuic5: error: no such option: -m的问题解决

    前言 在学习<Python从入门到精通(第2版)>的第15章 GUI界面编程--15.2.4 将.ui文件转换为.py文件时,按照书中步骤出错时的问题解决,希望对同样学习本书的同学有所帮助 ...

  6. GitHub - 电脑经常无法访问GitHub页面

    来自这里 1.打开Dns检测|Dns查询 - 站长工具2.在检测输入栏中输入http://github.com官网3.把检测列表里的TTL值最小的IP输入到host里,并对应写上github官网域名. ...

  7. 【CTF隐写工具】binwalk工具使用方法

    工具简介 Binwalk 是一种快速.易于使用的工具,用于分析.逆向工程和提取固件映像. 工具环境 Linux Linux环境下安装 直接使用apt/yum进行安装 apt install binwa ...

  8. GitHub + Hexo 搭建个人博客网站

    一.准备工作 1. GitHub + Hexo 的优势 Hexo 提供现成的模板和模块:github 的 pages 功能提供免费的服务器,零成本搭建属于自己的博客. 2. 需要了解的网站 githu ...

  9. 简述HashSet的扩容机制以及我们在重写equals()的时候为何会重写hashcode()

    简述HashSet的扩容机制以及我们在重写equals()的时候为何会重写hashcode()   摘要:在背面试知识点的时候存在这样一条著名的面试题:我们重写equals()的时候为什么要重写has ...

  10. IDEA 2022.1.3 创建一个 Maven 管理的 Web 项目

    新建一个空项目,用于管理模块 创建完成,如下所示 删除 src 目录 删除后,如下所示 新建一个 Maven 模块 新建完成,如下所示 右键 pro07-javaweb-begin 模块,选择 Add ...