当前位置: 首页 > 知识库问答 >
问题:

如果消费者更多是分区,kafka消费者如何工作

云航
2023-03-14

谁能请解释和指导我链接或资源阅读关于Kafka消费者如何在下面的场景下工作。

>

  • 一个有5个消费者的消费者组和3个分区的主题(Kafka是如何决定的)

    一个消费者组有5个消费者,主题有10个分区(kafka如何分担负载)

    两个消费者组和两个服务器的kafka集群,其中一个主题被划分在节点1和节点2之间,当来自不同组的消费者订阅到一个分区时,如何避免重复。

    上面可能不是配置kafka时的最佳实践,但我需要知道它是如何处理的。

    提前谢了。

  • 共有1个答案

    翟柏
    2023-03-14

    分配分区的不是Kafka本身,而是消费者之一。第一个加入消费者组的人将被选为“领导者”,我们将开始为其他消费者分配分区。当然,每当一个新的消费者加入组时,Kafka“控制器”就会让领导消费者知道这一点,并开始重新平衡和重新分配分区。当一个消费者离开一个消费者群体时也是一样的。

    为了确认使用者参与其中,分区分配的策略由使用者配置中的partition.assignment.strategy属性指定。默认值为RangeAssignor,而其他默认值为RoundRobinAssignorStickyAssignor。您可以在这里找到更多关于它们如何工作的信息:

    https://kafka.apache.org/21/javadoc/org/apache/kafka/clients/consumer/rangeassignor.html https://kafka.apache.org/21/javadoc/org/apache/kafka/clients/consumer/rangeassignor.html https://kafka.apache.org/21/javadoc/org/apache/clients/consumer/rangeasignor.html

    也就是说,在您的场景中具体会发生什么?

    1. 3个消费者将获得每个分区。其他2个将空闲。
    2. 每个消费者将获得2个分区
    3. 使用不同的消费者组意味着纯粹的pub/sub,其中消费者组获得相同的消息。在使用1个主题和2个分区(在2个代理上)的情况下,两个消费者分别位于一个不同的消费者组中,将从所有2个分区获得相同的消息。如果消费者是不同消费者群体的一部分,就无法避免重复,这就是Kafka的工作原理。
     类似资料:
    • TL;DR;我试图理解一个被分配了多个分区的单个使用者是如何处理reach分区的消费记录的。 例如: 在移动到下一个分区之前,会完全处理一个分区。 每次处理每个分区中的可用记录块。 从第一个可用分区处理一批N条记录 以循环旋转方式处理来自分区的N条记录 我找到了或分配程序的配置,但这只决定了使用者如何分配分区,而不是它如何从分配给它的分区中使用。 我开始深入研究KafkaConsumer源代码,#

    • null 我在这一页上读到以下内容: 使用者从任何单个分区读取,允许您以与消息生成类似的方式扩展消息消耗的吞吐量。 也可以将使用者组织为给定主题的使用者组-组内的每个使用者从唯一分区读取,并且组作为一个整体使用来自整个主题的所有消息。 如果使用者多于分区,则某些使用者将空闲,因为它们没有可从中读取的分区。 如果分区多于使用者,则使用者将从多个分区接收消息。 如果使用者和分区的数量相等,则每个使用者

    • Flink kafka消费者有两种类型的消费者,例如: 这两个消费者层次结构扩展了相同的类。我想知道维护编号类背后的设计决策是什么?我们什么时候应该使用其中一种? 我注意到带有数字后缀的类有更多的特性(例如ratelimiting)。 https://github.com/apache/flink/blob/master/flink-connectors/flink-connector-kafka

    • 这是一个关于Kafka和信息如何被消费的非常基本的问题,但不幸的是,我在这一点上找不到任何答案。 假设我想过度分区,那么我将得到比消费者多10倍的分区。过度分区是必需的,因为我希望能够扩展(在未来并行处理更多的消息)。 1 个主题分为 1000 个分区,由 100 个使用者使用 =- 我的问题是: > 消息是如何为每个消费者消费的:它是以循环方式完成的吗?如果不是,分发是如何完成的? 有没有保证消

    • 本文向大家介绍Kafka 的消费者如何消费数据相关面试题,主要包含被问及Kafka 的消费者如何消费数据时的应答技巧和注意事项,需要的朋友参考一下 消费者每次消费数据的时候,消费者都会记录消费的物理偏移量(offset)的位置 等到下次消费时,他会接着上次位置继续消费

    • 是否有一种方法以编程方式访问和打印使用者滞后偏移,或者说使用者读取的最后一条记录的偏移与某个生产者写入该使用者分区的最后一条记录的偏移之间的位置差。 要知道我的最终目标是将这个值发送到prometheus进行监视,我应该在上面添加哪些语句来得到滞后偏移值?