2017-01-04 27 views
0

我可以为不同类型的更新创建名为update_i的主题,并使用user_id在Kafka MQ中对它们进行分区?我已经通过confluent.io通过这篇文章:https://www.confluent.io/blog/how-to-choose-the-number-of-topicspartitions-in-a-kafka-cluster/。另外,我知道我无法用动态数量的分区创建主题。这两个事实(卡夫卡分区的帖子和静态数量)。什么是交付机制的选择?卡夫卡用作新闻传递中的传递机制

+0

为什么要按用户标识进行分区?你想“订阅”还是仅处理来自某些用户而不是其他用户的消息?或者你正在考虑将user_id作为目标用户ID? –

回答

0

作为一个可能的解决方案,我建议创建多个分区,然后建立生产者使用以下规则

user_id mod <number_of_partitions> 

这将让你保持特定的user_id消息为了选择分区。

然后,如果您需要让消费者只处理特定user_id的消息,则可以编写一个(低级别)消费者,它将读取特定分区并仅处理为特定客户发送的消息并忽略所有其他消息。

1

我可以为不同类型的更新创建名为update_i的主题,并使用Kafka MQ中的user_id对它们进行分区吗?

如果我理解正确,答案是肯定的。

你需要简而言之做什么:

  • 主题配置:确定需要的分区你的主题(S)。通常,根据(1)输入数据的预期比例/容量(即缩放的写入侧)和/或(2)消耗用于处理的消息所需的并行性来确定分区的数量,缩放的一面。详情请参阅https://www.confluent.io/blog/how-to-choose-the-number-of-topicspartitions-in-a-kafka-cluster/

  • 给这些卡夫卡主题(也就是“卡夫卡制片人”一侧)写信息:在卡夫卡,信息是键值对。在你的情况下,你可以设置消息密钥为user_id。然后,当使用Kafka默认的“分区程序”时,同一个消息键(这里是:user_id)的消息会自动发送到同一个分区 - 这是您想要实现的。