Kafka 入门到起飞系列 - 消费者组管理、位移管理

这篇具有很好参考价值的文章主要介绍了Kafka 入门到起飞系列 - 消费者组管理、位移管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

消费者组 - Consumer Group

上文我们已经讲过消费者组了,我们知道消费组的存在可以保证一个主题下一个分区的消息只会被组内一个消费者消费,从而避免了消息的重复消费

什么是消费组 - Consumer Group?

消费者组是Kafka 提供的可扩展且具有容错性的消费者机制

消费组的三大特性

  1. 消费组有一个或多个消费者,消费者可以是一个服务、一个进程、一个线程
  2. 消费组具有一个唯一标识字符串,group.id
  3. 消费组订阅的主题每个分区只能分配给一个消费者

怎么理解呢,其实就是让Kafka的客户端(此时指消费者)具有弹性,弹性伸缩,可扩展,具有容错性
比如我们有一个主题,主题有5个分区,我们有一个消费组,组内有3个消费者组成消费者集群,如下图
Kafka 入门到起飞系列 - 消费者组管理、位移管理,kafka,kafka,分布式,消费者组,offset,位移管理
比如此时消费者消费能力不够了,我们可以在线添加一个消费者到消费组,提升消费能力,当然不管增加消费者还是消费者下线,都需要重新分配分区与消费者的关系(Rebalance)如下图
Kafka 入门到起飞系列 - 消费者组管理、位移管理,kafka,kafka,分布式,消费者组,offset,位移管理

消费组的存在就是说: 以消费组的名义,去消费主题的消息,当然最终消费组里的消费者有多少取决于主题有多少个分区
记录偏移量,多于分区个数的消费者会分配不到分区而造成空闲;同时也是以消费组的名义,在Kafka里记录消费消息的偏移量


既然讲到偏移量,那我们来看看偏移量(位移)是怎么管理的?

位移管理

首先位移就是偏移量(offset),就是消息的编号,Kafka内置了一个主题_consumer_offset来记录分区消费情况(该分区消费到第几号消息了),那么为什么说偏移量是由消费者自己管理的呢?因为是消费者自己决定消费分区里第几号消息,然后把这个偏移量信息定期提交到Kafka去,Kafka再将偏移量信息记录到_consumer_offset主题去,所以其实消费者本身也是一个生产者

消费者提交偏移量的两种方式

  • 自动提交,Kafka默认自动提交,可以通过参数调整 enable.auto.commit = false即关闭自动提交
  • 手动提交

Kafka 是如何记录偏移量信息的呢?

消费者是在消费消息的过程中定期提交偏移量的
Kafka会将group消费情况保存起来,做成一个offset map,如下图:

key: groupId + Topic + partition
value:  offset

绿色代表已经消费过了,红色代表未被消费消息,箭头代表偏移量,下一次要消费的消息
Kafka 入门到起飞系列 - 消费者组管理、位移管理,kafka,kafka,分布式,消费者组,offset,位移管理
在文件里实际存储形式如下:
在这里插入图片描述文章来源地址https://www.toymoban.com/news/detail-614217.html

以消费组的名义记录偏移量信息
这里我们发现记录偏移量时没有消费者什么事,这也是Kafka设计的精妙之处,
任意消费者分配了分区后只要以消费组的名义都能获取分区数据,
当消费者伸缩重新分配分区后,依然可以继续消费,
因为偏移量没有跟消费者绑定,是跟消费组绑定的,这也是一种容错机制

类似于Java里面多态的一种思想

到了这里,关于Kafka 入门到起飞系列 - 消费者组管理、位移管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kafka系列之:Kafka生产者和消费者

    batch.size:只有数据积累到batch.size之后,sender才会发送数据,默认16K。 linger.ms:如果数据迟迟未达到batch.size,sender等待linger.ms设置的时间到了之后就会发送数据。单位ms,默认值是0ms,表示没有延迟。 0:生产者发送过来的数据,不需要等数据罗盘应答。 1:生产者发送过来的

    2023年04月09日
    浏览(46)
  • Kafka系列——详解创建Kafka消费者及相关配置

    参考自kafka系列文章——消费者创建与配置 在读取消息之前,需要先创建一个 KafkaConsumer 对象。 创建 KafkaConsumer 对象与创建 KafkaProducer 对象非常相似——把想要传给消费者的属性放在 Properties 对象里,后面深入讨论所有属性。这里我们只需要使用 3 个必要的属性: bootstrap.

    2024年02月09日
    浏览(44)
  • Kafka入门, 消费者组案例(十九)

    在消费者API代码中,必须配置消费者id。命令行启动消费者不填写消费者组id会被自动填写随机得消费者组id 发送的信息 消费信息(因为我发了好多次) 发送信息发现只消费0分区的信息 复制三分,然后运行

    2024年02月12日
    浏览(37)
  • Kafka入门, 消费者工作流程

    pull(拉)模式: consumer采用从broker中主动拉取数据。 Kafka采用这种方式。 push(推)模式: Kafka没有采用这种方式,因为由broker决定消息发送速率,很难适应所有消费者的速率。例如推送速度是50m/s,consumer1,consumer2就来不及处理消息 pull模式不足之处是,如果kafka没有数据,消费者

    2024年02月12日
    浏览(38)
  • Kafka入门,漏消费和重复消费, 消费者事务,数据积压(二十四)

    重复消费:已经消费了数据,但是offset没提交。 漏消费:先提交offset后消费,有可能会造成数据得漏消费 如果向完成consumer端得进准一次性消费,那么需要Kafka消费端将消费过程和提交offset过程做原子绑定。此时我们需要将kafka的offset保存到支持事务的自定义介质(比如MySQ

    2024年02月15日
    浏览(42)
  • Kafka系列:查看Topic列表、消息消费情况、模拟生产者消费者

    执行topic删除命令时,出现提示 这条命令其实并不执行删除动作,仅仅是在zookeeper上标记该topic要被删除而已,同时也提醒用户一定要提前打开delete.topic.enable开关,否则删除动作是不会执行的。 解决办法: a)在server.properties中设置delete.topic.enable参数为ture b)如下操作: 1.登

    2023年04月26日
    浏览(59)
  • Kafka入门, 消费者工作流程(十八)

    pull(拉)模式: consumer采用从broker中主动拉取数据。 Kafka采用这种方式。 push(推)模式: Kafka没有采用这种方式,因为由broker决定消息发送速率,很难适应所有消费者的速率。例如推送速度是50m/s,consumer1,consumer2就来不及处理消息 pull模式不足之处是,如果kafka没有数据,消费者

    2024年02月13日
    浏览(70)
  • kafka-consumer-groups.sh消费者组管理

      先调用 MetadataRequest 拿到所有在线Broker列表 再给每个Broker发送 ListGroupsRequest 请求获取 消费者组数据。 查看指定消费组详情 --group 查看所有消费组详情 --all-groups 查询消费者成员信息 --members 查询消费者状态信息 --state 删除指定消费组 --group 删除所有消费组 --all-groups 想要

    2024年02月03日
    浏览(44)
  • Kafka系列之:记录一次Kafka Topic分区扩容,但是下游flink消费者没有自动消费新的分区的解决方法

    生产环境Kafka集群压力大,Topic读写压力大,消费的lag比较大,因此通过扩容Topic的分区,增大Topic的读写性能 理论上下游消费者应该能够自动消费到新的分区,例如flume消费到了新的分区,但是实际情况是存在flink消费者没有消费到新的分区 出现无法消费topic新的分区这种情况

    2024年02月14日
    浏览(56)
  • 13、Kafka ------ kafka 消费者API用法(消费者消费消息代码演示)

    消费者API的核心类是 KafkaConsumer,它提供了如下常用方法: 下面这些方法都体现了Kafka是一个数据流平台,消费者通过这些方法可以从分区的任意位置、重新开始读取数据。 根据KafkaConsumer不难看出,使用消费者API拉取消息很简单,基本只要几步: 1、创建KafkaConsumer对象,创建

    2024年04月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包