为什么shopify sarama消费者需要分区来消费消息

6rvt4ljy  于 2021-06-08  发布在  Kafka
关注(0)|答案(1)|浏览(1027)

我很抱歉发布了一个与Kafka图书馆相关的问题,因为没有多少人对图书馆特定的问题感兴趣。但是这个库是golang-kafka实现中最常用的库之一。
我想创建一个简单的消费者使用萨拉玛图书馆听一个主题。现在据我所知,在高级kafkaapi中,默认情况下,如果没有指定特定的分区,使用者将侦听所有的主题分区。但是,在这个库中,使用者接口只有consumerpartition函数,其中分区是必需的param。函数的签名为:

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

这让我有点困惑。有人做过吗?
另外,我还有一个关于Kafka的基本问题。如果我有一个由3个使用者示例组成的使用者组,并且他们正在听2个主题,每个主题有2个分区,那么我是否需要特别提到哪个使用者示例将消耗到哪个分区,或者kafka fetch api将根据负载自行处理它?

jogvjijk

jogvjijk1#

我使用sarama集群,它是sarama的一个开源扩展(shopifysarama也推荐)。
使用sarama cluster,您可以使用以下api创建使用者:

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

所以不需要分区。你应该只提供Kafka的地址 brokers ,您的 consumer group 哪个呢 topics 你想要消费。
消费者处理
为了维持顺序,您应该只为每个分区分配一个使用者。
因此,如果您的使用者组中有3个使用者,并且您希望他们使用2个主题(每个主题有2个分区),则应按如下方式分配:

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

您可能会遇到其中一个客户进展更快(其中一个主题具有更高的吞吐量),您将需要重新平衡。
建议使用一个库(比如sarama集群)来处理这个问题。

相关问题