繁体   English   中英

关联Kafka和动态主题

[英]Correlating in Kafka and dynamic topics

我正在使用Kafka构建一个相关系统。 假设有一个服务A执行数据处理,并且有数千个客户端B向其提交作业。 B是短命的,它们出现在网络上,将数据推送到A然后发生两件重要的事情:

  1. B将立即从A获得状态;
  2. B然后将完全退出,保持在线以接收有关状态的进一步更新,或者偶尔会重新开启以检查状态。

(这与网格计算或mpi没有什么不同)。

这两点都应该使用众所周知的correlationId概念来实现: B拥有一个唯一的id(在我的情况下是UUID),它在头文件中发送给A ,而头文件又用它作为Reply-To主题发送状态更新至。 这意味着它必须动态创建主题,它们无法预先确定。

我打开了auto.create.topics.enable ,它确实动态地创建了主题,但是现有的消费者并不知道它们并且需要重新启动[以获取主题元数据,我想,如果我理解文档正确的话]。 我还检查了消费者的metadata.max.age.ms设置,但它似乎没有帮助,即使我将它设置为一个非常低的值。

据我所知,这还没有答案,即: kafka过滤/动态主题创建kafka消费者动态检测添加的主题Kafka制作人可以创建主题和分区吗? 或回答不满意。

由于有数百个A和数千个B ,我不可能使用共享主题或类似的东西,以免我的网络过载。 我可以使用Kafka的AdminTools或其他任何东西预先创建主题,但我发现它有些愚蠢(尽管我看到人们使用它与Zookeeper和Kafka基础设施本身交谈的现实例子)。

所以问题是,是否有一种方法可以动态创建Kafka主题,使消费者和生产者能够在不重新启动的情况下了解它? 并且,在最坏的情况下,AdminTools真的会帮助它,我必须在哪一方使用它 - AB

Kafka 0.11, Java 8

更新使用AdminClient创建主题无论出于何种原因都没有帮助,当我尝试订阅时,消费者仍然会抛出LEADER_NOT_AVAILABLE

建议不要创建无限数量的主题。 我建议您重新设计拓扑/系统。

我曾想过自己制作动态主题但后来才意识到,最终zookeeper会因为过时的主题而耗尽内存(想象一年后可以创建多少个主题)。 如果您确保在创建的主题上有一些上限,这可能会有效。 整体来说是行政头痛。

如果您使用Kafka查询请求响应,您会发现其他人也说这样做很尴尬( Kafka是否支持请求响应消息 )。

好的,所以我会回答我自己的问题。

  1. 使用AdminClient创建主题仅在创建相应的使用者之前执行。
  2. 改变了我的拓扑结构,考虑到1)并在消息头中引入了相关id的交换(与JMS中相同)。 我还必须实现某些拓扑管理方法,将B分组到容器中。

应该注意的是,正如许多人所说的,这仅在B s处于单一消费者群体并且使用1个分区监听主题时才有效。

为了了解我正在进行的工作,你可能会看看我一直致力于https://github.com/ikonkere/magic的中间件框架。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM