Kafka协议兼容性改进

  在Kafka 0.10.2.0以前,Kafka服务器端和客户端版本之间的兼容性是“单向”的,即高版本的broker能够处理低版本client的请求。反过来,低版本的broker不能处理高版本client的请求。因为升级client要远比升级broker简单得多,所以这个限制给不少用户带来了麻烦,甚至有不少人都不肯意去升级broker版本——毕竟无downtime的状况下正确升级Kafka服务器是个不小的挑战。bootstrap

  自0.10.2.0版本开始,社区对这个问题进行了优化——对于低版本broker + 高版本client(0.10.2.0)的环境而言,如今用户能够运行命令先查看当前broker支持的协议版本,而后再选择broker支持的最高版本封装请求便可。命令格式以下(在client端运行该命令):api

bin/kafka-broker-api-version.sh --bootstrap-server localhost:9092服务器

下面两张图分别表示查看0.10.2.0和0.10.0.1的broker所支持各协议的版本范围,注意我标红了FETCH请求以示区别:网络

                

  左边的图链接的是0.10.2.0版本的broker,能够看到该版本的Kafka服务器支持的FETCH请求版本范围是0到3,默认使用3;而右边的图连入的是0.10.0.1的Kafka,它只支持0~2版本的FETCH请求。所以你在编写客户端程序时须要根据这张表来确认broker支持的请求的最高版本,这样就间接实现了“低broker处理高client请求”的兼容性目标。优化

  考虑到Java版本的client已经被广大用户直接使用了,社区也改写了Java clients底层的网络客户端代码,里面会自动地判断链接的broker端所支持client请求的最高版本,并自动建立合乎标准的请求。所以,对于FETCH请求和PRODUCE请求而言, 用户不用担忧须要本身实现这些细节。spa

  总之,自0.10.2.0以后用户能够简单地升级client端代码到这个版本就能够很容易地实现与低版本Kafka服务器的交互了。server

相关文章
相关标签/搜索