##kafka各个版本特色介绍和总结 ###1.1 kafka的功能特色:linux
分布式消息队列编程
消息队列的数据模型, 造成流式数据。 提供Pub/Sub方式的海量消息处理。以高容错的方式存储海量数据流。保证数据流的顺序。 消费者:一份消息可多个消费者都处理,也能够只由一个消费者处理
线性扩展,高可用api
分布式系统,易于向外扩展。全部的producer、broker和consumer都会有多个,均为分布式的。无需停机便可扩展机器。 动态的增长一个topic的partition文件数量,就能够线性扩展一个topic的处理能力。
以高容错的方式存储海量数据流。安全
每一个topic包含多个partition,partiton又有多个副本,均匀的分布在多个机器上。
高吞吐量:生成和消费速度很是快网络
1. kafka server 生成日志的速度能够接近磁盘的只写速度(几十兆 ~ 百兆)。 kafka的实现思想是文件直写(直接使用linux 文件系统的cache)的commit log. 速度很是的快. 若是消息大小为百字节级别的话,那么也就是说单机写入能够达到几十W/S。 2. 磁盘顺序读写 3. 采用linux Zero-Copy提升消息发送到consumer的性能。减小IO操做步骤;能够提升60%的数据发送性能。
###1.2 kafka的使用场景: kafka的使用场景,即kafka的用途。运维
1. 下降系统组网复杂度。 2. 下降编程复杂度,各个子系统不在是相互协商接口,各个子系统相似插口插在插座上,Kafka承担高速数据总线的做用。
日志收集,用户行为数据,运维监控数据收集,均可以适合该场景。分布式
海量数据 发布/订阅的消息队列工具
实时计算的流式数据源(storm,spark-streaming)性能
离线计算的数据源测试
1. kafka的数据文件做为离线计算的数据源。 2. 消费kafka的数据,存储到离线平台HDFS等。
###1.3 kafka的大的版本升级
kafka 从0.7 ,0.8.x, 0.9.x 0.10.0.X ,1.0.0 的主要演进:
1.0.0 ~1.1.0 的重大升级 (2017.11.1)
1. 更好地支持磁盘容错,更优雅地处理磁盘错误. 2. Streams API 在 1.0.0 版本里继续演进. 3. 支持 Java 9 4. 提高了生产者的吞吐量。 5. kafka 第一个正式版。
在0.11.x的重大变化(2017.6.28)
1. kafka Streams 支持 Exactly-Once Semantics
在0.10.x的重大变化(2016.5.22)
1. 从0.10.0.0开始,增长一个新的客户端Kafka Streams客户端API。 用于流式处理存储在kafka topic的数据。这个新客户端仅支持0.10.x或更高的版本。 2. 旧的的Scala的生产者已经弃用。使用者尽快使用最新的Java客户端,新的消费者API已标记为稳定。 3. 消息包含了一个时间戳字段和压缩后消息的关系offset。 5. 新的Java消费者如今容许用户经过分区上的时间戳来搜索offset。 6. 启用了kafka的权限。 7. kafka集群的broker id 支持自动生成了(cluster_id)。 8. kafka broker 的服务协议有增长。 9. 日志保留时间再也不基于日志段的最后修改时间。相反,它将基于日志段中消息的最大时间戳。 10.日志滚动时间再也不取决于日志段的建立时间。而是基于消息中的时间戳. 影响: 1. 客户端须要升级到0.10.0.0,避免形成,消息格式转换,形成系统负载升高。 2. 因为kafka功能的扩充,消息格式更改,kafka的吞吐性能有稍微的降低。 (若是集群的能力与网络接近,可能会超过网卡,并看到因为过载的故障和性能问题。) 3. 整体上将kafka 0.10.x变的更加稳健,功能也更加完善。
1. Java 1.6再也不支持。 2. Scala 2.9再也不支持。 3. 变动topic配置管理开始单独处理。 4. 启用新的kafka性能测试工具。 5. broker协议版本升级,升级须要重启服务。 6. 分区的leader和副本的同步机制发生了变化。 7. kafka client的源码包结构有所变化。 8. 日志清理和压缩的机制发生了变化。 9. Kafka Connect这个功能模块 10. 安全特性的第一次加入:客户端链接borker使用SSL或SASL进行验证。 11. Comsumer API再也不有high-level、low-level之分。 0.9版本的kafka 因为变化和改动较多,很不稳定,在生产环境中不多使用。
服务端 最稳定的版本,性能最好;但客户端还不是很完善。 客户端api不兼容之前的版本。
比较老的版本。