gpt4 book ai didi

go - 为什么 Shopify Sarama 消费者需要分区来消费消息

转载 作者:IT王子 更新时间:2023-10-29 01:57:58 31 4
gpt4 key购买 nike

我很抱歉发布与 Kafka 图书馆相关的问题,因为没有多少人对图书馆的特定问题感兴趣。但是这个库是 golang-Kafka 实现中最常用的库之一。

我想使用 Sarama 库创建一个简单的消费者来监听一个主题。据我所知,在高级 Kafka API 中,如果未指定特定分区,默认情况下消费者会监听所有主题分区。但是,在此库中,Consumer 接口(interface)只有 ConsumePartition 函数,其中分区是必需的参数。函数的签名是:

ConsumePartition(topic string, partition int32, offset int64) (PartitionConsumer, error) 

这让我有点困惑。有人做过吗?

此外,我有一个关于 Kafka 的基本问题。如果我有一个由 3 个消费者实例组成的消费者组,并且他们正在听 2 个主题,每个主题有 2 个分区,那么我是否需要特别提及哪个消费者实例将消费到哪个分区或 Kafka Fetch API 将处理它它自己基于负载?

最佳答案

我使用 sarama-cluster这是 Sarama 的开源扩展(Shopify Sarama 也推荐)。
借助 Sarama 集群,您可以使用此 API 创建消费者:

cluster.NewConsumer(brokers, consumerGroup, topics, kafkaConfig)

所以不需要分区。您应该只提供您的 Kafka 经纪人的地址、您的消费者组的名称以及您希望消费的主题


Consumers handling

为了维持秩序,你应该只为每个分区分配一个消费者。
因此,如果您的消费者组中有 3 个消费者,并且您希望他们消费 2 个主题,每个主题有 2 个分区,您应该按如下方式分配:

partitions 1,2 -> consumer A  
partition 3 -> consumer B
partition 4 -> consumer C

您最终可能会发现其中一个消费者进展得更快(其中一个主题具有更高的吞吐量),您将需要重新平衡。
建议使用可以为您处理此问题的库(如 sarama-cluster)。

关于go - 为什么 Shopify Sarama 消费者需要分区来消费消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44279935/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com