阿帕奇-卡夫卡有1亿个主题 [英] apache- kafka with 100 millions of topics

查看:0
本文介绍了阿帕奇-卡夫卡有1亿个主题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试用ApacheKafka替换兔子MQ,在规划时,我遇到了几个概念性规划问题。

首先,我们对每用户队列策略使用Rabb MQ,这意味着每个用户使用一个队列。这符合我们的需要,因为每个用户代表要与该特定用户一起完成的一些工作,并且如果该用户导致问题,则队列对于其他用户永远不会有问题,因为队列是分开的(问题意味着队列中的消息将使用http请求被分派给用户。如果用户拒绝接收消息(服务器可能会关闭?)它将返回重试队列,这将不会导致消息丢失(除非队列关闭)

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

但我的计划有问题。

首先,我在考虑为每个用户创建尽可能多的主题,这意味着每个用户将拥有每个主题(这会导致什么问题?我的最高估计是我将有大约100万到500万个主题)

其次,如果我决定根据操作和用户id的随机哈希进行分区的主题,如果一个用户当前没有使用消息出现问题,分区中的所有用户是否都必须等待?组织这种情况的最佳方式是什么?

因此得出的结论是,100万~500万用户。我们不希望一个用户阻止正在处理的大量其他用户。对每个用户设置主题将解决这个问题,如果有这么多人进入,似乎ZooKeeper可能会有问题(这是真的吗?)

构建结构的最佳解决方案是什么?考虑可伸缩性?

推荐答案

首先,我在考虑为每个用户创建尽可能多的主题,这意味着每个用户将拥有每个主题(这会导致什么问题?我的最高估计是我将有大约100万到500万个主题)

我建议不要像这样做模特。

在谷歌上搜索"卡夫卡话题限制",你会找到这个话题的相关考虑因素。我想你会发现你不会想要制造数百万个话题。

第二,如果我决定根据用户id的操作和随机哈希分区来查找主题

是的,为这些消息设置一个主题,然后根据相关字段(如user_idconversation_id)发送这些消息。此字段可以作为消息上的一个字段,并用作ProducerRecordkey,用于确定此消息要发往主题中的哪个分区。我不会将该操作包括在主题名称中,而是包括在消息本身中。

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

这取决于用户使用消息的方式。您可以设置一个超时,在超时之后,消息将被路由到某个"失败"的主题。或者在没有ACK的情况下以UDP样式向用户发送消息。有很多方法可以模拟这一点,如果不知道消费者是如何将消息转发给客户的,就很难提供建议。


此外,如果您使用的是Kafka Streams,请注意StreamPartitioner接口。此接口出现在将消息具体化到主题的KStreamKTable方法中,并且在聊天应用程序中可能很有用,在聊天应用程序中,您的客户端在特定的TCP连接上处于空闲状态。

这篇关于阿帕奇-卡夫卡有1亿个主题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆