不同版本的客户端,在单一版本的 Kafka broker 上

Different versions of clients, on single version of Kafka broker

不同客户端版本的kafka是否可以打同一个版本的kafka broker。我知道我们可以启用 'inter.broker.protocol.version' 让新版本的 Kafka 接受旧版本的客户端。

例如,有没有办法让 0.8 和 0.9 版本的 Kafka 客户端在 0.9 Kafka 代理上工作?

实际上inter.broker.protocol.version与此没有任何关系,其唯一目的是支持集群的滚动升级,以防止新代理启动"talking"旧代理无法理解的较新协议版本的情况,所以这就是您将 inter.broker.protocol.version 设置为当前集群版本的原因。

关于客户端,只要满足一个简单的规则,应该没有任何问题:客户端应该使用代理支持的协议版本,例如。一个 0.9 的代理会愉快地处理来自旧客户端的所有请求,但会在 0.10 中出现的请求版本上失败。基本上规则是 upgrade brokers first, then clients 以确保在代理上实现所有必要的逻辑以成功处理客户端请求。

客户端在每次请求时发送请求版本,因此代理可以区分新旧客户端并正确处理他们的请求。

更新:

Starting with version 0.10.2, Java clients (producer and consumer) have acquired the ability to communicate with older brokers. Version 0.11.0 clients can talk to version 0.10.0 or newer brokers. However, if your brokers are older than 0.10.0, you must upgrade all the brokers in the Kafka cluster before upgrading your clients. Version 0.11.0 brokers support 0.8.x and newer clients.

https://kafka.apache.org/documentation/#upgrade_11_0_0