【发布时间】:2016-11-06 21:23:14
【问题描述】:
我正在尝试用 apache-kafka 替换 rabbit mq,在规划时,我遇到了几个概念规划问题。
首先,我们为每个用户队列策略使用 rabbit mq,这意味着每个用户使用一个队列。这符合我们的需要,因为每个用户都代表要与该特定用户完成的一些工作,并且如果该用户导致问题,则队列将永远不会与其他用户发生问题,因为队列是分开的(问题意味着队列中的消息将被分派给使用http请求的用户。如果用户拒绝接收消息(服务器可能宕机?),它将返回重试队列,这不会导致消息丢失(除非队列宕机))
现在 kafka 具有容错性和故障安全性,因为它写入磁盘。 这正是我尝试在我们的结构中实施 kafka 的原因。
但我的计划有问题。
首先,我想为每个用户创建尽可能多的主题,这意味着每个用户都会拥有每个主题(这会导致什么问题?我的最大估计是我将拥有大约 1~5 百万个主题)
其次,如果我决定根据用户id的随机哈希进行操作和分区的主题,如果一个用户当前没有消费消息的问题,分区中的所有用户都必须等待吗?构建这种情况的最佳方法是什么?
因此,作为结论,1~5 百万用户。我们不希望一个用户阻止大量其他正在处理的用户。每个用户拥有一个主题将解决这个问题,如果有这么大的数量进入,zookeeper 似乎可能会出现问题(这是真的吗?)
结构化的最佳解决方案是什么?考虑可扩展性?
【问题讨论】:
标签: apache-kafka kafka-consumer-api kafka-producer-api