kafka0.8和kafka0.9


发布于 2024-08-08 / 64 阅读 / 0 评论 /
介绍kafka0.8和kafka0.9发布版本和重要特性

kafka-0.8.2 新特性

kafka0.8.2包含以下新特性

异步发送

producer不再区分同步(sync)和异步方式(async),所有的请求以异步方式发送,这样提升了客户端效率。producer请求会返回一个应答对象,包括偏移量或者错误信。

这种异步方地批量的发送消息到kafka broker节点,因而可以减少server端资源的开销。新的producer和所有的服务器网络通信都是异步地,在ack=-1模式下需要等待所有的replica副本完成复制时,可以大幅减少等待时间

偏移量保存方式

在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,所以读取很快。

CheckPoint

kafka可以频繁的对offset做检查点checkpoint,即使每消费一条消息提交一次offset。

在0.8.1中,已经实验性的加入这个功能,0.8.2中可以广泛使用。

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,这些leader partition在这段时间内也不可读写。如果集群非常大或者partition 很多,partition不可用的时间将会比较长。

  1)可以关闭unclean.leader.election,也就是不在ISR(IN-Sync Replica)列表中的replica,不会被提升为新的leader partition。unclean.leader.election=false时,kafka集群的持久化力大于可用性,如果ISR中没有其它的replica,会导致这个partition不能读写。

  2)设置min.isr(默认值1)和 producer使用ack=-1,提高数据写入的持久性。当producer设置了ack=-1,如果broker发现ISR中的replica个数小于min.isr的值,broker将会拒绝producer的写入请求。max.connections.per.ip限制每个客户端ip发起的连接数,避免broker节点文件句柄被耗光。

kafka-0.9 新特性

kafka0.9包含以下新特性

安全特性

在0.9之前,Kafka安全方面的考虑几乎为0,在进行外网传输时,只好通过Linux的防火墙、或其他网络安全方面进行配置。相信这一点,让很多用户在考虑使用Kafka进行外网消息交互时有些担心。

在0.9之后,kafka集群提高了安全性,目前支持以下的安全措施:

  • 客户端连接borker使用SSL或SASL进行验证

  • borker连接ZooKeeper进行权限管理

  • 数据传输进行加密(需要考虑性能方面的影响)

  • 客户端读、写操作可以进行授权管理

  • 可以对外部的可插拔模块的进行授权管理

当然,安全配置方面是可选的,可以混合使用。如:做过安全配置的的borkers和没有进行安全配置的borkers放在同一集群,授权的客户端和没有授权的客户端,也可以在同一个集群等等。具体配置详见官方文档。

Kafka Connect

这个功能模块,也是之前版本没有的。可以从名称看出,它可以和外部系统、数据集建立一个数据流的连接,实现数据的输入、输出。有以下特性:

  • 使用了一个通用的框架,可以在这个框架上非常方面的开发、管理Kafka Connect接口

  • 支持分布式模式或单机模式进行运行

  • 支持REST接口,可以通过REST API提交、管理 Kafka Connect集群

  • offset自动管理

同时,官方文档中,也给出了例子。通过配置,往一个文本文件中输入数据,数据可以实时的传输到Topic中。在进行数据流或者批量传输时,是一个可选的解决方案。

新的Comsumer API

新的Comsumer API不再有high-level、low-level之分了,而是自己维护offset。这样做的好处是避免应用出现异常时,数据未消费成功,但Position已经提交,导致消息未消费的情况发生。通过查看API,新的Comsumer API有以下功能:

  • Kafka可以自行维护Offset、消费者的Position。也可以开发者自己来维护Offset,实现相关的业务需求。

  • 消费时,可以只消费指定的Partitions

  • 可以使用外部存储记录Offset,如数据库之类的。

  • 自行控制Consumer消费消息的位置。

  • 可以使用多线程进行消费