安装Kafka集群

Kafka经常被用于实时流数据架构来提供实时分析。由于Kafka是一个快速、可扩展、持久和容错的发布-订阅消息系统,Kafka被用在JMS、RabbitMQ和AMQP由于容量和响应能力可能不会被考虑的情况下。Kafka具有更高的吞吐量、可靠性和复制特性,这使得它适用于跟踪服务调用(跟踪每个调用)或跟踪传统MOM可能不考虑的物联网传感器数据。

Kafka可以与Flume/Flafka、Spark Streaming、Storm、HBase、Flink和Spark协同工作,对流数据进行实时摄取、分析和处理。Kafka是Hadoop大数据湖的数据摄入流。Kafka Broker支持大量消息流,以便在Hadoop或Spark中进行低延迟后续分析。此外,Kafka流(子项目)可以用于实时分析。

Kafka的增长呈爆炸式增长,超过1 / 3的财富500强公司使用Kafka。这些公司包括十大旅游公司、十大银行中的7家、十大保险公司中的8家、十大电信公司中的9家等等。LinkedIn,微软和Netflix每天使用Kafka处理1,000,000,000,000个消息。

Kafka用于实时数据流,用于收集大数据或做实时分析或两者兼备。Kafka与内存中的微服务一起使用,以提供持久性,它可以用于向CEP(复杂事件流系统)和物联网/IFTTT风格的自动化系统提供事件。

这篇教程step-by-step地讲解了如何在Linux上安装、设置和运行Apache Kafka集群,并测试了Kafka发行版附带的Producer和Consumer shell脚本,以及如何创建和描述一个主题(topic)。

Kafka设计目标

以下是Kafka框架的一些设计目标:

  • 可扩展性。Kafka框架应该处理所有四个维度的可扩展性(事件生产者、事件处理器、事件消费者和事件连接器)。
  • 大容量。它应该能够处理大量的数据流。
  • 数据转换。Kafka应该提供使用来自生产者的数据流来派生新的数据流。
  • 低延迟。解决传统的需要低延迟的消息传递场景。
  • 容错能力。Kafka集群应该处理主机和数据库的故障。

安装和设置Kafka集群

首先下载Apache Kafka安装包:

$ wget https://archive.apache.org/dist/kafka/2.4.1/kafka_2.12-2.4.1.tgz

下载完成后,使用文件归档工具tar解压文件的内容:

$ tar -xzf kafka_2.12-2.4.1.tgz

在.bashrc或.profile文件中设置Kafka的主目录位置到PATH环境变量。

$ nano ~/.bashrc
PATH=$PATH:~/bigdata/kafka_2.12-2.4.1.tgz/bin

现在通过运行下面的命令将环境变量加载到打开的会话中,使其生效。

$ source ~/.bashrc

注意:下面演示的所有命令都是在Kafka主目录下执行的。

启动Zookeeper

ZooKeeper是针对分布式应用的高性能协调服务,Kafka使用ZooKeeper存储集群的元数据信息。Kafka内置了Zookeeper,我们只需要用默认配置启动服务。

$ ./bin/zookeeper-server-start.sh config/zookeeper.properties

启动Kafka Broker

Kafka集群由一个或多个broker (Kafka服务器)组成,broker将消息组织到各自的主题(topic),并将所有的Kafka消息保存在一个主题日志文件中7天。根据主题的复制因子(备份数量),消息将被复制到多个broker。

另外打开另一个终端会话窗口,用默认配置启动Kafka服务器。

$ ./bin/kafka-server-start.sh config/server.properties

创建Kafka主题(topic)

所有的Kafka消息被组织成主题,主题在集群中的多个broker中被划分和复制。生产者向主题发送消息,消费者从主题读取消息。复制因子定义要存储消息的多少个副本,而分区允许用户通过跨多个broker分割特定主题中的数据来并行化主题。

打开另一个终端会话窗口,创建kafka主题“text_topic”,并设复制因子为1,分区为1。

$ ./bin/kafka-topics.sh --create --zookeeper localhost:2181 \
--replication-factor 1 \
--partitions 1 \
--topic text_topic

列出所有的主题

运行下面的命令列出所有的主题:

$ ./bin/kafka-topics.sh --zookeeper localhost:2181 --list

查看主题描述

运行下面的命令来描述主题。这会返回主题分区和复制信息。

$ ./bin/kafka-topics.sh --zookeeper localhost:2181 --describe

运行Kafka Producer(消息生产者)

运行随Kafka发行版而带的Kafka Producer shell:

$ ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic text_topic

然后输出以下内容:

good good study
day day up

运行Kafka Consumer(消息消费者)

运行随Kafka发行版而带的Kafka Consumer shell:

$ ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic text_topic --from-beginning

可以看到,收到了如下内容:

good good study
day day up

小结

现在我们已经安装并运行了Apache Kafka。可以使用Kafka客户端创建Kafka的生产者和消费者程序。大多数编程语言都支持使用Kafka客户端。在后续的课程中,我们会看到使用Scala和Java编写的Kafka生产者和消费者程序。


《Flink原理深入与编程实战》