Cloudera Distribution of Apache Kafka 译文 [未完待续]
默认分类
2020-01-15
381
0
本文为CDH发行版Kafka组件的官方文档译文,若发现翻译错误,欢迎告知 :)
Cloudera Distribution of Apache Kafka
作为Hadoop生态系统的一部分,Cloudera发布版的Apache Kafka是一个分布式日志提交服务,类似发布/订阅消息传递系统,不过吞吐量更大,内置的分区,复制和容错。日益流行的日志收集和流处理,通常(但不仅限于)与Apache Hadoop,Apache Storm, 和 Spark Streaming一起使用。
日志可以被认为是一个简单的存储抽象。因为新条目会持续添加到日志中,从左到右,日志条目的编号可用时间戳表示。从概念上讲,一个日志可以被认为是一个以时间排序文件或表。
Kafka集成了传统发布/订阅消息系统的概念(诸如producer,consumer和broker),parallelism,及企业特性来改善性能和容错。 架构图如下(一个主题是共享相似特性的消息的类别。)
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的分区数多,多出来的线程会处于空闲状态。
注意: 如果多个程序都使用同样的组和主题,那么每个程序获得的是完整数据的一部分。