Kafka的安装和启动
一、准备工作
1. 安装JDK
可以用命令 java -version
2.下载Kafka
这里下载的是二进制版本(V2.3.1)。kafka自带打包和配置好 zookeeper,无需单独安装zookeeper。解压后,可以看到目录结构如下:
kafka Kafka 根目录
├─bin Kafka 运行的脚本
│ ├─connect-distributed.sh 连接 kafka 集群模式
│ ├─connect-standalone.sh 连接 kafka 单机模式
│ ├─kafka-acls.sh
│ ├─kafka-broker-api-versions.sh
│ ├─kafka-configs.sh 配置管理脚本
│ ├─kafka-console-consumer.sh kafka 消费者控制台
│ ├─kafka-console-producer.sh kafka 生产者控制台
│ ├─kafka-consumer-groups.sh kafka 消费者组相关信息
│ ├─kafka-consumer-perf-test.sh kafka 消费者性能测试
│ ├─kafka-delegation-tokens.sh
│ ├─kafka-delete-records.sh 删除低水位的日志文件
│ ├─kafka-dump-log.sh
│ ├─kafka-log-dirs.sh kafka消息日志目录
│ ├─kafka-mirror-maker.sh 不同数据中心 kafka 集群复制工具
│ ├─kafka-preferred-replica-election.sh 触发 preferred replica 选举
│ ├─kafka-producer-perf-test.sh kafka 生产者性能测试脚本
│ ├─kafka-reassign-partitions.sh 分区重分配脚本
│ ├─kafka-replica-verification.sh 复制进度验证脚本
│ ├─kafka-run-class.sh
│ ├─kafka-server-start.sh 启动 kafka 服务
│ ├─kafka-server-stop.sh 停止 kafka 服务
│ ├─kafka-streams-application-reset.sh
│ ├─kafka-topics.sh kafka主题
│ ├─kafka-verifiable-consumer.sh 可检验的 kafka 消费者
│ ├─kafka-verifiable-producer.sh 可检验的 kafka 生产者
│ └─trogdor.sh
│ ├─windows 在 Windows 系统下执行的脚本目录
│ │ ├─connect-distributed.bat
│ │ └─ … 更多 windows 下执行的脚本文件
│ ├─zookeeper-security-migration.sh
│ ├─zookeeper-server-start.sh 启动 zk 服务
│ ├─zookeeper-server-stop.sh 停止 zk 服务
│ └─zookeeper-shell.sh zk 客户端脚本
│
├─config Kafka、zookeeper 等配置文件
│ ├─connect-console-sink.properties
│ ├─connect-console-source.properties
│ ├─connect-distributed.properties
│ ├─connect-file-sink.properties
│ ├─connect-file-source.properties
│ ├─connect-log4j.properties
│ ├─connect-standalone.properties
│ ├─consumer.properties 消费者配置
│ ├─log4j.properties
│ ├─producer.properties 生产者配置
│ ├─server.properties kafka 服务配置
│ ├─tools-log4j.properties
│ ├─trogdor.conf
│ └─zookeeper.properties zk 服务配置
│
├─libs Kafka 运行的依赖库
│ ├─activation-1.1.1.jar
│ └─...
│
├─site-docs/ Kafka 相关文档
│ ├─kafka_2.12-2.3.1-site-docs.tgz
二、启动
1. 启动zookeeper
bin/zookeeper-server-start.sh config/zookeeper.properties
2. 启动kafka
bin/kafka-server-start.sh config/server.properties
可以通过 jps 命令查看 Kafka 服务进程是否已经启动,
jps -l
进程ID 为 27454 的进程,就是 Kafka 服务进程。
三、生产和消费
1. 主题
在前面的目录结构中,我们可以知道 bin 下提供的 kafka-topics.sh 脚本,与主题相关。
- 创建主题
bin/kafka-topics.sh --zookeeper localhost: 2181/kafka --create --topic topic-demo --replication-factor 3 --partitions 4
--zookeeper 指定了 Kafka 所连接的 ZooKeeper 服务地址,
--create 是创建主题的动作指令,
--bootstrap-server 指定了连接的 Kafka 集群地址,
--topic 指定了所要创建主题的名称,
--replication-factor 指定了副本因子,
--partitions 指定了分区个数。
即创建了一个分区为 4、副本因子为 3 的主题 topic-demo。
- 查看主题
可以通过 --describe 查看主题具体信息
bin/kafka-topics.sh --zookeeper localhost: 2181/kafka --describe --topic topic-demo
- 查看所有的主题
bin/kafka-topics.sh --list --zookeeper localhost:2181
2. 生产和消费
bin 目录下提供了两个脚本 kafka-console-producer.sh 和 kafka-console-consumer.sh,通过控制台收发消息。
- 生产
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic topic-demo
--broker-list 指定了连接的 Kafka 集群地址,
--topic 指定了发送消息时的主题。
上述命令报错:Error while fetching metadata with correlation id 1 : {topic-demo=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
这是因为无法识别 hostname。
解决办法:修改 config/server.properties,将
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://your.host.name:9092
改为
listeners=PLAINTEXT://localhost:9092
advertised.listeners=PLAINTEXT://localhost:9092
保存、重启 kafka 即可。再次发送消息没有报错了。
- 消费
另开一个终端,执行如下命令
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topic-demo
--bootstrap-server 指定了连接的 Kafka 集群地址,
--topic 指定了消费者订阅的主题。
可以看到,当使用 kafka-console-producer.sh 脚本发送消息至主题 topic-demo后,当前终端窗口会同步刚刚输入的消息内容,这说明,消费者消费了消息(这话怎么这么拗口~)