kafka versions and features - downgoon/hello-world GitHub Wiki
kafka 版本演变概述
是否暴露ZK
- Topic 管理始终需要暴露ZooKeeper地址;
- Message PubSub 逐渐过渡到隐藏ZooKeeper地址。
Topic 管理
Topic 创建/列表 均需指定ZK地址
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
bin/kafka-topics.sh --list --zookeeper localhost:2181
PubSub
- 0.7 版本: 完全暴露ZK地址
bin/kafka-console-producer.sh --zookeeper localhost:2181 --topic test
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
- 0.8 版本: Pub隐藏,Sub暴露
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
- 0.10.1 开始: 完全隐藏ZK地址
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
Kafka 生态
截止 2017-2-16, kafka 0.9 版本的生态已经同步跟进了。 kafka 0.10.1 有不少尚未跟进。
笔者关心的生态有:
- Web控制台:kafka-manager, kafkaOffsetMonitor
- ZK 可视化: Kafka 依赖的ZK 可视化工具
- zkui@github
- zooinspector@github
- 命令行收发消息:kafkacat 可以从命令行收发消息,比官方脚本方便很多。
- HTTP Proxy: 详见 官方 Proxy (HTTP REST, etc)
- Connector: MySQL 等同Kafka的导入导出。
0.9 新特性
- 安全
- Connect
- 用户配额
- 新的Consumer API
安全
新的Consumer API
Kafka 0.8.2, Producer被重新设计, Kafka 0.9则重新设计了Consumer接口。它不再区分high-level consumer API和low-level consumer API,而是提供了一个统一的consumer API。 Kafka本身可以维护offset,consumer的position,也可以自己维护。这样consumer可以不借助ZooKeeper,而是使用自己的系统来保持自己的读取位置。
用户配额
一个大的Kafka集群可能有多个用户。0.9以前,consumer 如果处理的消息非常快,可能会垄断整个boker的网络资源,producer 也是如此。现在Kafka 0.9提供了基于client的用户配额控制。对于Producer可以控制每个client的每秒写的字节数,对于Consumer控制每个client的每秒读的字节。
Connect
Kafka Connect可以方便地在Kafka上进行大规模的数据导入导出。
0.10 新特性
Streams
如果你有这样的需求,从Kafka拉取数据进行流处理然后再推送回Kafka,那么你会喜欢0.10的Kafka Streams。
Kafka Streams是一个 类库,它实现了一系列流处理动作(例如join,filter,aggregate等),能够帮助你构建一个功能齐全的低延迟的流处理系统。
它支持有状态或无状态的处理,并且能够被部署在各种框架和容器中(例如YARN,Mesos,Docker),也可以集成在Java应用里。
机架感知
和Hadoop一样,Kafka现在也实现了机架感知。 如果所有备份都在单个机架上,那么一旦这个机架出问题,那么所有的备份都将失效。 现在Kafka会让备份分布在不同的机架上,显著的提高了可用性。
Kafka Connect Rest API
在之前的版本中,用户只能通过log来监控Connector的状态。 在0.10中增加了监控和控制的API,可以列出所有的Connector状态,并且可以暂停或重启任务。
笔者注:
有了REST API,就类似spring boot & cloud 微服务一样,可以通过第三方监控轻松实现监控了。应用只需要负责把自己的状态发送出来,监控让更加专业的监控应用去做,这就是微服务的概念。
Kafka Consumer Max Record
在0.9中,如果想要控制Consumer的单次请求返回数据量,只能控制timeout的大小,0.10加入新的Consumer参数max.poll.records来控制返回的数据条数。
附录-1:流处理PK
流处理有哪些技术呢?
- Storm
- Spark Streaming
- Apache Flink
- Kafka Streams
- Flume: 日志收集过程可以利用Interceptor进行流处理。
事实上,很多流处理都借助Kafka做其“管道(Channel)”。