[英]Correlating in Kafka and dynamic topics
我正在使用Kafka构建一个相关系统。 假设有一个服务A执行数据处理,并且有数千个客户端B向其提交作业。 B是短命的,它们出现在网络上,将数据推送到A然后发生两件重要的事情:
(这与网格计算或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真的会帮助它,我必须在哪一方使用它 - A或B ?
Kafka 0.11, Java 8
更新使用AdminClient
创建主题无论出于何种原因都没有帮助,当我尝试订阅时,消费者仍然会抛出LEADER_NOT_AVAILABLE
。
建议不要创建无限数量的主题。 我建议您重新设计拓扑/系统。
我曾想过自己制作动态主题但后来才意识到,最终zookeeper会因为过时的主题而耗尽内存(想象一年后可以创建多少个主题)。 如果您确保在创建的主题上有一些上限,这可能会有效。 整体来说是行政头痛。
如果您使用Kafka查询请求响应,您会发现其他人也说这样做很尴尬( Kafka是否支持请求响应消息 )。
好的,所以我会回答我自己的问题。
AdminClient
创建主题仅在创建相应的使用者之前执行。 应该注意的是,正如许多人所说的,这仅在B s处于单一消费者群体并且使用1个分区监听主题时才有效。
为了了解我正在进行的工作,你可能会看看我一直致力于https://github.com/ikonkere/magic的中间件框架。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.