Kafka的安装和启动

一、准备工作

1. 安装JDK

可以用命令 java -version

如何查看kafka版本 查看kafka版本号_kafka

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

如何查看kafka版本 查看kafka版本号_zookeeper_02

进程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

如何查看kafka版本 查看kafka版本号_如何查看kafka版本_03

  • 查看所有的主题
bin/kafka-topics.sh --list --zookeeper localhost:2181

如何查看kafka版本 查看kafka版本号_kafka_04

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。

如何查看kafka版本 查看kafka版本号_zookeeper_05

解决办法:修改 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后,当前终端窗口会同步刚刚输入的消息内容,这说明,消费者消费了消息(这话怎么这么拗口~)