【发布时间】:2018-06-16 06:03:50
【问题描述】:
不同客户端版本的 kafka 是否可以命中单个版本的 Kafka 代理。我知道我们可以启用“inter.broker.protocol.version”以使新版本的 Kafka 接受旧版本的客户端。
例如,我们有没有办法让 0.8 和 0.9 版本的 Kafka 客户端在 0.9 Kafka 代理上工作?
【问题讨论】:
标签: java scala apache-kafka kafka-consumer-api
不同客户端版本的 kafka 是否可以命中单个版本的 Kafka 代理。我知道我们可以启用“inter.broker.protocol.version”以使新版本的 Kafka 接受旧版本的客户端。
例如,我们有没有办法让 0.8 和 0.9 版本的 Kafka 客户端在 0.9 Kafka 代理上工作?
【问题讨论】:
标签: java scala apache-kafka kafka-consumer-api
其实inter.broker.protocol.version与此无关,其唯一目的是支持集群滚动升级,以防止新代理开始“谈论”旧代理无法理解的新协议版本的情况,所以这就是你设置的原因inter.broker.protocol.version 到您当前的集群版本。
关于客户端,只要满足一个简单的规则就应该没有问题:客户端应该使用代理支持的协议版本,例如0.9 的代理会很乐意处理来自旧客户端的所有请求,但会在 0.10 中出现的请求版本上失败。基本上规则是upgrade brokers first, then clients,以确保在代理上实现所有必要的逻辑以成功处理客户端请求。
客户端在每个请求上发送请求版本,因此代理可以区分旧客户端和新客户端并正确处理他们的请求。
【讨论】:
更新:
从 0.10.2 版开始,Java 客户端(生产者和消费者)已经获得了与旧代理进行通信的能力。 0.11.0 版客户端可以与 0.10.0 版或更高版本的代理通信。但是,如果您的代理早于 0.10.0,则必须先升级 Kafka 集群中的所有代理,然后再升级您的客户端。 0.11.0 版代理支持 0.8.x 和更新的客户端。
【讨论】: