1. kafka-0.8.2 新特性
1.1 异步发送
producer不再区分同步(sync)和异步方式(async),所有的请求以异步方式发送,这样提升了客户端效率。producer请求会返回一个应答对象,包括偏移量或者错误信。
这种异步方地批量的发送消息到kafka broker节点,因而可以减少server端资源的开销。新的producer和所有的服务器网络通信都是异步地,在
ack=-1
模式下需要等待所有的replica副本完成复制时,可以大幅减少等待时间
1.2 偏移量保存方式
在0.8.2之前,comsumer定期提交已经消费的kafka消息的offset位置到zookeeper中保存。
对zookeeper而言,每次写操作代价是很昂贵的,而且zookeeper集群是不能扩展写能力的。在0.8.2开始,可以把comsumer提交的offset记录在compacted topic(__comsumer_offsets
)中,该topic设置最高级别的持久化保证,即ack=-1
。__consumer_offsets
由一个三元组< comsumer group, topic, partiotion>
组成的key和offset值组成,在内存也维持一个最新的视图view,所以读取很快。
1.3 CheckPoint
kafka可以频繁的对offset做检查点checkpoint,即使每消费一条消息提交一次offset。
在0.8.1中,已经实验性的加入这个功能,0.8.2中可以广泛使用。
1.4 auto rebalancing
auto rebalancing
的功能主要解决broker节点重启后,leader partition在broker节点上分布不均匀,比如会导致部分节点网卡流量过高,负载比其他节点高出很多。
auto rebalancing主要配置如下:
controlled.shutdown.enable ,是否在在关闭broker时主动迁移leader partition。
基本思想是每次kafka接收到关闭broker进程请求时,主动把leader partition迁移到其存活节点上,即follow replica提升为新的leader partition。如果没有开启这个参数,集群等到replica会话超时,controller节点才会重现选择新的leader partition,这些le