这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战
上一篇:认识 Apache Kafka
上一篇简单介绍了消息系统和 Apache Kafka,这篇简单介绍如何在本地部署并运行 Kafka,注意,本文介绍的内容容易上手,适合新手,仅限开发、测试、学习使用,请勿用在生产环境。
Apache Kafka 由 Java 和 Scala 开发,因此,需要有 Java 运行环境,安装之前需要确保本地已经安装了 JDK 1.8 或以上的版本。
JDK 的下载可以去这个地址:传送门,具体的安装步骤不在本文讨论范围内。
另外,Kafka 使用 Zookeeper 存储元数据,因此,要运行 Kafka 需要先部署 Zookeeper,不过 Kafka 官方的发行版里会自带 Zookeeper,可以直接使用。
Zookeeper 是一个分布式应用程序协调服务,独立之前是 Hadoop 的组件,可以提供配置维护、域名服务、分布式同步等功能。
下面开始介绍安装步骤。
第一步,下载 Kafka 的发行包。
在 Apache Kafka 的网站上可以找到下载页面,或者从这个地址 下载 kafka_2.13-3.0.0.tgz 。
下载之后解压并进入目录。
➜ tar -xzf kafka_2.13-3.0.0.tgz
➜ cd kafka_2.13-3.0.0
解压之后,目录结构大概是这样:
.
├── LICENSE
├── NOTICE
├── bin
├── config
├── libs
├── licenses
└── site-docs
其中,bin 目录下有很多 .sh 的脚本文件,包含了 Kafka 和 Zookeeper 的运行脚本,config 目录下包含了配置文件。
第二步,运行 Kafka。以下的命令都在 Kafka 的根目录下执行。
首先启动 Zookeeper 服务。
➜ bin/zookeeper-server-start.sh config/zookeeper.properties
然后再打开另一个命令行,启动 Kafka Broker 服务。
➜ bin/kafka-server-start.sh config/server.properties
第三步,创建一个 Topic,一个 Topic 可以为一个事件的队列。
➜ bin/kafka-topics.sh --create --topic hello-events --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
Created topic hello-events.
因为我们并没有搭建集群,因此 partitions 和 replication-factor 的值都是 1。执行后会有一行信息提示我们 hello-events 创建成功了。
使用 kafka-topics.sh --describe 命令可以查看已经创建的 Topic 的信息。
➜ bin/kafka-topics.sh --describe --bootstrap-server localhost:9092
Topic: hello-events TopicId: LeWuXHJwQqi9AUCuyWjOEA PartitionCount: 1 ReplicationFactor: 1 Configs: segment.bytes=1073741824
Topic: hello-events Partition: 0 Leader: 0 Replicas: 0 Isr: 0
第四步,向 Topic 中写入事件。
再打开一个新的命令行,执行以下命令:
➜ bin/kafka-console-producer.sh --topic hello-events --bootstrap-server localhost:9092
这时,会进入一个交互式的命令行界面,在其中随意输入一些文本内容,并回车提交。
比如:
>First Event
>Second Event
第四步,读取事件。
再打开第四个命令行,输入一下命令:
➜ bin/kafka-console-consumer.sh --topic hello-events --from-beginning --bootstrap-server localhost:9092
就会读取到刚才在写入消息的交互式命令行输入的内容。这时,如果在写入消息的命令行继续写入内容,读取事件的命令行也会读取到新的内容。
此时,我们便在本地命令行完成了将 Kafka 作为消息系统,创建主题、向它发送消息并且从中读取消息的全过程。我们总共打开了四个命令行,要停止这些程序,直接在每个窗口中分别执行 Ctrl+C 即可。
另外 Zookeeper 和 Kafka 运行的过程中,会在 /tmp/kafka-logs /tmp/zookeeper 两个目录产生数据,可以将它们删除:
➜ rm -rf /tmp/kafka-logs /tmp/zookeeper