Cloudera Distribution of Apache Kafka 译文 [未完待续]

本文为CDH发行版Kafka组件的官方文档译文,若发现翻译错误,欢迎告知 :)

Cloudera Distribution of Apache Kafka

作为Hadoop生态系统的一部分,Cloudera发布版的Apache Kafka是一个分布式日志提交服务,类似发布/订阅消息传递系统,不过吞吐量更大,内置的分区,复制和容错。日益流行的日志收集和流处理,通常(但不仅限于)与Apache Hadoop,Apache Storm, 和 Spark Streaming一起使用。

日志可以被认为是一个简单的存储抽象。因为新条目会持续添加到日志中,从左到右,日志条目的编号可用时间戳表示。从概念上讲,一个日志可以被认为是一个以时间排序文件或表。

Kafka集成了传统发布/订阅消息系统的概念(诸如producer,consumer和broker),parallelism,及企业特性来改善性能和容错。 架构图如下(一个主题是共享相似特性的消息的类别。)

kafka architecture

Kafka提供以下特性:

  • 使用O(1)的磁盘结构存储消息,即使T级别数据也能提供稳定的性能
  • 高吞吐量,及时使用普通硬件也支持数十万每秒的消息传递。
  • 支持分区,分布式消费,并保证每个分区记录的顺序。
  • 支持并行加载数据到Hadoop中。

Using Kafka

Using Kafka Command-line Tools

Kafka 命令行工具位于 /usr/bin

  • kafka-topics

创建,修改,显示和描述主题。例如:

$ /usr/bin/kafka-topics --zookeeper zk01.example.com:2181 --list
sink1
t1
t2
$ /usr/bin/kafka-topics --zookeeper zk01.example.com:2181 --create --topic
  • kafka-console-consumer

从Kafka主题读取数据并且输出到中断。例如:

$ /usr/bin/kafka-console-consumer --zookeeper zk01.example.com:2181 --topic t1
  • kafka-console-producer

从终端读取数据并写入Kafka主题。 例如:

$ /usr/bin/kafka-console-producer --broker-list kafka02.example.com:9092,kafka03.example.com:9092 --topic t1
  • kafka-consumer-offset-checker

注意:kafka-consumer-offset-checker 并不支持新的Consumer API
检查读取和写入的消息数量,以及指定consumer组中每个consumer的偏移量 例如:

$ /usr/bin/kafka-consumer-offset-checker --group flume --topic t1 --zookeeper zk01.example.com:2181

Using Kafka with Spark Streaming

关于配置Spark Streaming接收Kafka的数据,请看Spark Streaming + Kafka Integration指导。

如果你使用CDH 5.7或者更高版本,Spark仅支持Kafka 2.0及更高版本。

验证Kafka与Spark Streaming的整合(Validating Kafka Integration with Spark Streaming)

为了验证Kafka与Spark Streaming的整合,运行KafkaWordCount的例子:

如果你用parcel安装的Spark那么使用以下命令:

/opt/cloudera/parcels/CDH/lib/spark/bin/run-example streaming.KafkaWordCount <zkQuorum> <group> <topics> <numThreads>

如果你使用安装包装的Spark,请运行以下命令:

/usr/lib/spark/bin/run-example streaming.KafkaWordCount <zkQuorum> <group> <topics> <numThreads>

参数如下:

  • - ZooKeeper 地址 (比如, zk01.example.com:2181,zk02.example.com:2181,zk03.example.com:2181).
  • - Kafka消费组
  • - Kafka主题
  • - 读取数据的线程数. 如果线程数比Kafka的分区数多,多出来的线程会处于空闲状态。

注意: 如果多个程序都使用同样的组和主题,那么每个程序获得的是完整数据的一部分。

打赏支持:支付宝/微信。如果你觉得我的文章对你有所帮助,可以打赏我哟。