kafka versions and features - downgoon/hello-world GitHub Wiki

kafka 版本演变概述

kafka version history.png

是否暴露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

bin/kafka-console-producer.sh --zookeeper localhost:2181 --topic test
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test 
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
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 生态

kafka eco.png

截止 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上进行大规模的数据导入导出。

kafka connect

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)”。

参考资料