ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

kafka 消费者

2022-08-11 13:03:57  阅读:187  来源: 互联网

标签:消费者 分区 指定 fetch ms kafka 群组


消费者

消费者和消费者组

Kafka消费者从属于消费者群组。一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息。

  • 消费者组1和消费者组2可以同时消费所有消息,互不影响。

再平衡:

分区的所有权从一个消费者转移到另一个消费者,这样的行为被称为再均衡。

消费者通过向被指派为群组协调器的broker(不同的群组可以有不同的协调器)发送心跳来维持它们和群组的从属关系以及它们对分区的所有权关系。只要消费者以正常的时间间隔发送心跳,就被认为是活跃的,说明它还在读取分区里的消息。

消费者相关配置:

  1. fetch.min.bytes:

    该属性指定了消费者从服务器获取记录的最小字节数

  2. fetch.max.wait.ms:

    我们通过fetch.min.bytes告诉Kafka,等到有足够的数据时才把它返回给消费者。而feth. max.wait.ms则用于指定broker的等待时间,默认是500ms。如果没有足够的数据流入Kafka,消费者获取最小数据量的要求就得不到满足,最终导致500ms的延迟。

    如果fetch.max.wait.ms被设为100ms,并且fetch.min.bytes被设为1MB,那么Kafka在收到消费者的请求后,要么返回1MB数据,要么在100ms后返回所有可用的数据,就看哪个条件先得到满足。

  3. max.partition.fetch.bytes:

    该属性指定了服务器从每个分区里返回给消费者的最大字节数。它的默认值是1MB,也就是说,KafkaConsumer.poll()方法从每个分区里返回的记录最多不超过max.partition. fetch.bytes指定的字节。

  4. session.timeout.ms:

    该属性指定了消费者在被认为死亡之前可以与服务器断开连接的时间,默认是3s。如果消费者没有在session.timeout.ms指定的时间内发送心跳给群组协调器,就被认为已经死亡,协调器就会触发再均衡,把它的分区分配给群组里的其他消费者。该属性与heartbeat.interval.ms紧密相关。heartbeat.interval.ms指定了poll()方法向协调器发送心跳的频率,session.timeout.ms则指定了消费者可以多久不发送心跳。

一般需要同时修改这两个属性,heartbeat.interval.ms必须比session.timeout.ms小,一般是session.timeout.ms的三分之一

  1. enable.auto.commit:

    该属性指定了消费者是否自动提交偏移量,默认值是true。为了尽量避免出现重复数据和数据丢失,可以把它设为false,由自己控制何时提交偏移量。如果把它设为true,还可以通过配置auto.commit.interval.ms属性来控制提交的频率。

  2. partition.assignment.strategy:

    分区会被分配给群组里的消费者。PartitionAssignor根据给定的消费者和主题,决定哪些分区应该被分配给哪个消费者。Kafka有两个默认的分配策略。

标签:消费者,分区,指定,fetch,ms,kafka,群组
来源: https://www.cnblogs.com/shix0909/p/16575664.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有