首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kafka:如何在Kafka中实现轮询分区

Kafka:如何在Kafka中实现轮询分区
EN

Stack Overflow用户
提问于 2016-07-28 23:19:22
回答 4查看 13.1K关注 0票数 3

我是新来卡夫卡的。我的要求是,我有两个分区,例如Partition-0和Partition-1,并且我有一个值列表,其中也包含键值。我想根据我的key来存储数据,比如key-1将存储到Partition-0,key-2将存储到Partition-1。使用旧的API可以实现像我们需要实现Partition接口一样的功能,但是我可以使用新的API来实现这一点。谢谢你

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-07-29 01:55:44

Stack Overflow用户

发布于 2018-03-01 01:54:56

如果你想要轮询行为,只要在写给Producer时不要传递密钥就行了,DefaultPartitioner会帮你完成这项工作。您不需要编写自定义实现。在javadoc中:

代码语言:javascript
复制
/**
 * The default partitioning strategy:
 * <ul>
 * <li>If a partition is specified in the record, use it
 * <li>If no partition is specified but a key is present choose a partition based on a hash of the key
 * <li>If no partition or key is present choose a partition in a round-robin fashion
 */
票数 3
EN

Stack Overflow用户

发布于 2016-07-29 03:27:44

您可以通过覆盖kafka生产者的default partitioner,以循环方式向kafka生产。

一个伪实现

代码语言:javascript
复制
class RRPartitioner():
      def __init__():
            # Using topic metadata get total number of partitions
            self.total_partitions = client[topic].get_number_partitions()
            self.part_offset = 0

      def partitioner(self, key, msg):
          if self.part_offset > self.total_partitions:
              self.part_offset = 0
              return self.part_offset
          else:
              self.part_offset += 1
              return self.part_offset

上面的实现是纯循环的,如果你想让消息按键排序并且有循环,你必须在自定义分区程序中做更多的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38640513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档