2016-07-05 44 views
1

我试图与Apache的卡夫卡,同时规划,以取代兔MQ的,我碰到的几个概念规划问题。apache-卡夫卡与100个百万主题

首先,我们用兔MQ每用户队列策略意味着每个用户使用一个队列。这适合我们的需要,因为每个用户都代表要完成特定用户的某项工作,并且如果该用户导致问题,则队列将永远不会与其他用户产生问题,因为队列是分离的(问题意味着队列中的消息将被调度给用户使用http请求,如果用户拒绝接收消息(可能是服务器down),它将返回到重试队列中,这将导致没有丢失消息(除非队列关闭))

现在kafka是容错和故障安全,因为它写入磁盘。 正因为如此,我试图在我们的结构中实施卡夫卡。

但也有问题,我的尼洋河。

首先,我想创造尽可能多的话题,因为每个用户意味着每个用户必须每一个主题(有什么问题就这个原因?我最大的估计是,我将有大约1〜500万主题)

其次,如果我决定根据用户标识的随机哈希来查找基于操作和分区的主题,如果一个用户当前没有使用消息时出现问题,那么分区中的所有用户都必须等待吗?构建这种情况的最佳方式是什么?

因此,作为结论,1〜5百万的用户。我们不希望有一个用户阻止大量其他正在处理的用户。有每个用户的主题将解决这个问题,好像有可能与动物园管理员一个问题,如果这样的大量获取(这是真的吗?)

这将是对结构的最佳解决方案?考虑可扩展性?

+2

不知道最佳解决方案;但我有一个比较强烈的感觉,在这里提出这样的问题不会有帮助。您主要在设计决策上寻找意见;从这个意义上说,你的问题太广泛了,很可能会让你更有价值,更接近要求而不是有用的答案。我宁愿直接转向卡夫卡人;我确信他们有论坛/用户组/邮件列表... – GhostCat

+0

我也对卡夫卡的建模方面感到困惑。我希望我的回答很好。 –

回答

1

首先,我想创造尽可能多的话题,因为每个用户意味着每个用户必须每一个主题(有什么问题就这个原因?我最大的估计是,我将有大约1〜500万主题)

我会建议像这样的建模。

谷歌周围“卡夫卡的话题限制”,你会发现这个问题的相关考虑。我想你会发现你不会想要制作数百万个话题。

其次,如果我决定去为用户ID的随机哈希基于操作和分区主题

是,对这些消息的单一主题,然后航线基础上,相关的消息字段,如user_idconversation_id。该字段可以作为消息中的字段出现,并用作ProducerRecordkey,用于确定此消息指定的主题中的哪个分区。我不会将该操作包含在主题名称中,而是包含在消息本身中。

如果一个用户当前没有使用消息时出现问题,分区中的所有用户都必须等待吗?构建这种情况的最佳方式是什么?

这取决于用户如何消费消息。您可以设置超时,然后将消息路由到某个“失败”主题。或者以UDP风格向用户发送消息,而不需要消息。有很多方法可以对此进行建模,并且很难在不知道消费者如何将消息转发给客户的情况下提供建议。


此外,如果您使用的是卡夫卡流,记下StreamPartitioner接口。此接口出现在KStreamKTable方法中,这些方法将消息实现为主题,并且可能在客户端在特定TCP连接上空闲的聊天应用程序中很有用。