Kafka指定分区消费及consumer-id,client-id相关概念解析

这篇具有很好参考价值的文章主要介绍了Kafka指定分区消费及consumer-id,client-id相关概念解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

xxx系列文章

xxxx系列(1)―

xxxx系列(2)―

xxxxx系列(3)―


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

前言

在最近使用Kafka过程中,发现使用@KafkaListener指定分区消费时(指定了所有分区),如果服务是多节点,会出现重复消费的现象,即两个服务节点中的消费者均会消费到相同信息,这与消费者组中只有一个消费者可以消费到消息的规则不相符,于是花时间找了找原因

参考链接:

Consumer 机制
小龙虾你抓不到(上面博主的专栏)

KafkaConsumer assign VS subscribe
Kafka的assign和subscribe订阅模式
使用kafka-consumer-group.sh查看消息消费情况,CONSUMER-ID,HOST,CLIENT-ID不显示问题分析
kafka _ spring.kafka.listener.concurrency 的使用
kafka之Consumer消费者基本概念
kafka consumer属性

【spring-kafka】@KafkaListener详解与使用
【spring-kafka】属性concurrency的作用及如何配置(RoundRobinAssignor 、RangeAssignor)
石臻臻的杂货铺

Kafka消费者订阅指定主题(subscribe)或分区(assign)详解

Kafka 核心技术与实战学习笔记(二十五)消费者组重平衡
孔汤姆(上面博主的专栏)

@KafkaListener 详解及消息消费启停控制
kafka&logstash&flume&rabbitMq(上面博主的专栏)


一、问题描述

  使用的代码如下,出现问题后使用kafka-consumer-groups.sh脚本查看,发现consumer-id,host,client-id均为空,这是很不正常的,于是搜索相关,在这篇博客找到了原因,(https://blog.csdn.net/z435128234/article/details/128320706)
@KafkaListener(topicPartitions = {@TopicPartition(topic = "arch",partitions = {"0"})})

kafka消费指定分区数据,Zookeeper及Kafka,kafka,java,分布式

二、问题解决

  之所以出现上面的的问题,是因为使用了消费组的手动分区,也就是consumer.assign()方式,如果使用了手动分区,则分区的自动管理方式不会再起作用,而且如果消费组成员变更或主题的元数据等信息改变,将不会触发再平衡机制。

kafka消费指定分区数据,Zookeeper及Kafka,kafka,java,分布式
结论
  KafkaConsumer.subscribe() : 为consumer自动分配partition,有内部算法保证topic-partition以最优的方式均匀分配给同group下的不同consumer。
  KafkaConsumer.assign() : 为consumer手动、显示的指定需要消费的topic-partitions,不受group.id限制,相当与指定的group无效(this method does not use the consumer’s group management)。

二、验证

两个服务节点,各自启动三个消费者
kafka消费指定分区数据,Zookeeper及Kafka,kafka,java,分布式
kafka消费指定分区数据,Zookeeper及Kafka,kafka,java,分布式
一个服务节点,启动三个消费者,concurrency设置为3,所以实际上是9个
kafka消费指定分区数据,Zookeeper及Kafka,kafka,java,分布式

结论

  client-id并不能唯一标识一个消费者,如果启动两个服务节点,就有重复的client-id出现,真正确定一个消费者的是consumer-id,由client-id+随机数生成

至于client-id的作用,官方给出的描述如下

An id string to pass to the server when making requests. The purpose of this is to be able to track the source of requests beyond just ip/port by allowing a logical application name to be included in server-side request logging.

发出请求时要传递给服务器的id字符串。这样做的目的是通过允许在服务器端请求日志中包含逻辑应用程序名称,能够跟踪不仅仅是ip/端口的请求源。
kafka消费指定分区数据,Zookeeper及Kafka,kafka,java,分布式
这里插入图片描述kafka消费指定分区数据,Zookeeper及Kafka,kafka,java,分布式

  查看kafka的server.log文件发现确实是在日志中起到标识作用的实际上是consumer-id,而并不是client-id,而client-id相当于只是consumer-id的一部分,但是由于consumer-id对使用者来说是不可见的,用户能够配置的只是consumer-id的前缀,即client-id,所以官方的解释本质上来说并没有太大问题
  但只有consumer-id才能确认唯一的一个消费者,client-id在多个spring-boot是会出现重复的,只有consumer-id(client-id+随机数)才能唯一确认一个消费者

除此之外,在kafka协议相关也使用了client-id
kafka消费指定分区数据,Zookeeper及Kafka,kafka,java,分布式

抓包查看消费者相关
kafka消费指定分区数据,Zookeeper及Kafka,kafka,java,分布式

kafka消费指定分区数据,Zookeeper及Kafka,kafka,java,分布式

  可以看到不仅有的client-id还有consumer-id,个人认为这个client只是个描述字段(非权威,勿喷),唯一确认请求的标志是correlation-id或是consumerid

欢迎关注我的公众号:映月空间文章来源地址https://www.toymoban.com/news/detail-549256.html

到了这里,关于Kafka指定分区消费及consumer-id,client-id相关概念解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Kafka篇——Kafka消费者端常见配置,涵盖自动手动提交offset、poll消息细节、健康状态检查、新消费组消费offset规则以及指定分区等技术点配置,全面无死角,一篇文章拿下!

    一、自动提交offset 1、概念 Kafka中默认是自动提交offset。消费者在poll到消息后默认情况下,会自动向Broker的_consumer_offsets主题提交当前 主题-分区消费的偏移量 2、自动提交offset和手动提交offset流程图 3、在Java中实现配置 4、自动提交offset问题 自动提交会丢消息。因为如果消费

    2024年01月22日
    浏览(55)
  • Kafka整理-Consumer(消费者)

    在Apache Kafka中,消费者(Consumer)是负责从Kafka的主题(Topics)读取数据的客户端应用程序。Kafka消费者的主要特点和工作原理如下: 1、订阅主题: 消费者可以订阅一个或多个Kafka主题,并从中读取数据。 2、消费者群组(Consumer Groups): 消费者可以组成消费者群组。在一个

    2024年04月10日
    浏览(50)
  • kafka之消费者(Consumer)

    1、kafka消费者消费方式         kafka 的消费者(Consumer)采用 pull 的方式主动从 broker 中拉取数据,这种不足之处会有:当 broker 中没有消息时,消费者会不断循环取数据,一直返回空数据。 2、消费者组 Consumer Group(CG):消费者组,由多个consumer组成。形成一个消费者组

    2024年01月20日
    浏览(40)
  • kafka-consumer-消费者代码实例

    目录 1 消费一个主题 2 消费一个分区 3 消费者组案例 消费topic为first的消息。 应用场景:当生产者将所有消息发往特定的某个主题分区。 消费first主题0号分区代码: 测试同一个主题的分区数据,只能由一个消费者组中的一个消费者进行消费。 创建三个消费者对某一分区进行

    2024年02月11日
    浏览(39)
  • 21 | Kafka Consumer源码分析:消息消费的实现过程

    我们在上节中提到过,用于解决消息队列一些常见问题的知识和原理,最终落地到代码上,都包含在收、发消息这两个流程中。对于消息队列的生产和消费这两个核心流程,在大部分消息队列中,它实现的主要流程都是一样的,所以,通过这两节的学习之后,掌握了这两个流

    2024年02月21日
    浏览(44)
  • Kafka-消费者-Consumer Group Rebalance设计

    在同一个Consumer Group中,同一个Topic的不同分区会分配给不同的消费者进行消费,那么为消费者分配分区的操作是在Kafka服务端完成的吗?分区是如何进行分配呢?下面来分析Rebalance操作的原理。 Kafka最开始的解决方案是通过ZooKeeper的Watcher实现的。 每个Consumer Group在ZooKeeper下都维

    2024年01月19日
    浏览(51)
  • kafka-consumer-groups.sh消费者组管理

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

    2024年02月03日
    浏览(44)
  • Kafka 架构深度解析:生产者(Producer)和消费者(Consumer)

    Apache Kafka 作为分布式流处理平台,其架构中的生产者和消费者是核心组件,负责实现高效的消息生产和消费。本文将深入剖析 Kafka 架构中生产者和消费者的工作原理、核心概念以及高级功能。 1 发送消息到 Kafka Kafka 生产者负责将消息发布到指定的主题。以下是一个简单的生

    2024年02月03日
    浏览(47)
  • kafka报错:No group.id found in consumer config, container properties

    Caused by: java.lang.IllegalStateException: No group.id found in consumer config, container properties, or @KafkaListener annotation; a group.id is required when group management is used. 报错提示没有配置groupid,那么配置groupid即可 配置group-id,重启服务器即可

    2024年02月11日
    浏览(41)
  • kafka启用SASL认证后使用kafka-consumer-groups.sh查看消费组报错的问题

    解决SASL认证类型kafka在使用kafka-consumer-groups.sh查看消费组数据时,报以下异常的问题 解决方案: 进入docker容器,非docker部署进入kafka安装地址即可: 进入容器 docker exec -it kafka容器ID bash 进入kafka的配置config文件夹: cd   /home/zk/kafka_2.11-2.1.1/config 执行命令: 输入内容并保存:

    2024年02月07日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包