与多个不同版本的kafka群集进行通信

时间:2017-03-14 06:40:16

标签: java apache-kafka kafka-consumer-api kafka-producer-api

我有两个版本为0.8.2.10.10.1的kafka群集。

我想要使用0.8.2.1中的一些事件,并将其他事件发送到0.10.1。我一直在阅读有关向后兼容性的信息,并了解客户端是向前兼容的。我无法找到对0.8.2.1生成未来版本的任何引用。是否可以使用单个客户端并与群集进行通信。

有没有办法在同一个java代码中同时使用这两个客户端。我正在使用maven作为我的构建工具。

1 个答案:

答案 0 :(得分:1)

如果要读取/写入具有不同版本的两个Kafka群集,则可以使用与较低版本对应的客户端。

例如,如果从0.8.2读取并写入0.10.1,则可以使用0.8.2消费者和0.8.2生产者,因为0.8.2生产者与0.10.1向前兼容。

对于客户端使用任何更高版本是行不通的,因为版本高于0.8.2的消费者将无法从0.8.2读取(即使0.9或0.10.1生产者能够写入0.10.1集群)。

关键是,您不能轻易地将0.8.2使用者和0.10.1生成者放入同一个应用程序,因为会出现类加载冲突。这不是不可能的想法,但是您需要为消费者和生产者使用不同的类加载器来隔离代码的两个部分以避免类加载冲突。完成写入,它允许您使用0.8.2使用者从0.8.2集群读取,同时使用0.10.1生成器写入0.10.1集群。

但如果您不需要0.10.1生产商提供的任何特殊功能,那么对于消费者和生产者来说似乎更容易使用0.8.2并避免处理不同类加载器的麻烦。自定义类加载器看起来更难以正确使用。