当前位置: 首页 > news >正文

Kafka 入门到起飞 - Kafka怎么做到保障消息不会重复消费的? 消费者组是什么?

Kafka怎么做到避免消息重复消费的? 消费者组是什么?

消费者

1、订阅Topic(主题)
2、从订阅的Topic消费(pull)消息,
3、将消费消息的offset(偏移量)保存在Kafka内置的一Topic名字是_consumer_offsets的主题中,在Kafka的logs文件下能看到这👟文件,存放的是消息的偏移量数据
在这里插入图片描述

消费者组

在这里插入图片描述

1、订阅同一个Topic的消费者可以加入到一个consumer Group(消费者组)
2、消费者组中的consumer共享一个group_idconfigs,put(“group.id”,”XXX”);只要消费者的group_id一样,就属于同一个消费者组
3、消费者组保证每个topic下一个partition的消息只能被一个消费者组下一个消费者消费,避免消息的重复消费
如上图,当前只有一个消费者组订阅这个Topic,消费者组里只有一个消费者,那么当前Topic中所有分区的消息都由这个消费者消费
4、当消费者端业务逻辑比较复杂,消费消息比较慢,这个时候我们可以向消费者组中多加几个消费者(横向扩展)来提升消费速度。无非就是消费者端一套代码再在几台新的服务器部署一套,加入到同一个group_id下,同时从主题消费消息
横向扩展后,Kafka会对消息的分区与消费者的对应关系重新调整,这就是rebalance(再平衡机制)
在这里插入图片描述
如上图,消费者组扩展一个消费者后,消费者1、2分别消费两个分区的消息
我们可以看到,一个分区对应一个消费者,但是一个消费者可以对应多个分区

如果上面结构还不够,两个消费者消费速度依然跟不上,那么我们还可以继续添加消费者,添加到4个消费者,此时主题分区与消费者的关系再次发生变化,需要再平衡,此时一个消费者消费一个分区消息,达到并行消费的效果
在这里插入图片描述

上面步骤我们看到了消息的分区可以横向扩展,消息的消费者也可以横向扩展,向消费者组添加消费者是横向扩展消费能力的主要方式,而消费者组是消费者的关键,消费者组来保证,主题下的消息不管由多少个分区,每条消息只会被一个消费者消费,就不会引起重复消费的情况

一般最佳情况是:消费者数 = 分区数,一个分区对应一个消费者,
消费者也不是越多越好,消费者数受限于分区数, 过多消费者会导致有的消费者没有分配分区导致空闲,如下图
在这里插入图片描述
所以对于高并发的场合,我们通常会给一个主题设置很多个分区,分区数多利于消费者横向扩张


上面是一个消费者组的情况,实际上对于一个Topic可以有不同的消费者组,如下图
在这里插入图片描述

  • 每个消费者组是相互独立的
  • 每个消费者组都可以拿到主题的全部数据
http://www.lryc.cn/news/101058.html

相关文章:

  • MongoDB 的增、查、改、删
  • mysql常用操作命令
  • 数学建模常见模型汇总
  • C#使用LINQ查询操作符实例代码(二)
  • jenkinsfile小试牛刀
  • C++ xmake构建
  • 推荐带500创作模型的付费创作V2.1.0独立版系统源码
  • wps图表怎么改横纵坐标,MLP 多层感知器和CNN卷积神经网络区别
  • rdb和aof
  • TCP网络通信编程之网络上传文件
  • Java中对Redis的常用操作
  • 链路追踪设计
  • Golang之路---02 基础语法——常量 (包括特殊常量iota)
  • Pytest学习教程_装饰器(二)
  • redis的如何使用
  • MyBatis(二)
  • 【【51单片机AD转换模块】】
  • Longest Divisors Interval(cf)
  • 配置文件、request对象请求方法、Django连接MySQL、Django中的ORM、ORM增删改查字段、ORM增删改查数据
  • CTF学习路线指南(附刷题练习网址)
  • 【Rust 基础篇】Rust默认泛型参数:简化泛型使用
  • 从源码分析Handler面试问题
  • shell编程 变量作用域
  • 华为eNSP:isis的配置
  • FS.05-SAS-UP-Methodology
  • Jmeter并发测试
  • 【JVM】浅看JVM的运行流程和垃圾回收
  • 使用低代码开发,需要注意哪些?
  • 面试总结-Redis篇章(八)——Redis分布式锁
  • 压力测试-商场项目