前期准备
Kafka概述
访问 Kafka 官网了解 Kafka 是什么、能做什么、如何使用。
Kafka 安装前置条件
安装 ZooKeeper
下载 Kafka 与解压
找到 kafka_2.11-0.9.0.0.tgz
并下载
将他传输到 /abs/software
目录
解压到指定目录
1 | #将Kafka解压到/abs/app/中 |
配置 kafka 环境变量
将 kafka 目录添加到系统环境变量(~/.bash_profile)中
1 | vi ~/.bash_profile |
让配置生效
1 | source ~/.bash_profile |
Kafka单节点单broker的部署及使用
修改配置文件
在 /abs/app/tmp
目录下新建 kafka-logs
文件夹:
1 | mkdir kafka-logs |
在 /abs/app/kafka_2.11-0.9.0.0/config
目录中对 server.properties
进行修改
1 | # 编辑配置文件 |
启动 Kafka
先启动 ZooKeeper
参照 Kafka 官网快速启动
在前台启动单节点单 broker
的 Kafka
在 /abs/app/kafka_2.11-0.9.0.0/bin
目录中进行如下操作:
1 | kafka-server-start.sh $KAFKA_HOME/config/server.properties |
验证启动 Kafka
用 jps
查看当前所有的 Java 进程 pid如下:
1 | [root@hadoop tmp]# jps |
可以看到 Kafka
进程已经启动
创建一个 topic
1 | kafka-topics.sh --create --zookeeper hadoop:2181 --replication-factor 1 --partitions 1 --topic hello_topic |
(PS: 创建 topic
相当于指定 zookeeper
)
查看所有 topic
1 | kafka-topics.sh --list --zookeeper hadoop:2181 |
发送消息
1 | kafka-console-producer.sh --broker-list hadoop:9092 --topic hello_topic |
(PS: 发送消息相当于指定 broker
)
消费消息
1 | kafka-console-consumer.sh --zookeeper hadoop:2181 --topic hello_topic --from-beginning |
(PS: 消费消息相当于指定 zookeeper
。 from-beginning
的意思为是否从开始消费,根据实际需求决定是否添加)
验证发送消息与消费消息
在发送端发送消息,看看在消费消息端是否能看到。
查看 topic 详情
查看所有 topic 详情
1 | kafka-topics.sh --describe --zookeeper hadoop:2181 |
查看指定 topic 详情
1 | kafka-topics.sh --describe --zookeeper hadoop:2181 --topic hello_topic |
Kafka单节点多broker的部署及使用
修改配置文件
参照 Kafka 官网快速启动进行相关配置
在 /abs/app/kafka_2.11-0.9.0.0/config
目录中为 broker
新建三个配置文件
1 | # make a config file for each of the brokers |
对 server-1.properties
、 server-2.properties
、 server-3.properties
进行相关配置
1 | # config server-1.properties |
启动 Kafka
先启动 ZooKeeper
参照 Kafka 官网快速启动
在后台启动单节点多 broker
的 Kafka
在 /abs/app/kafka_2.11-0.9.0.0/bin
目录中进行如下操作:
1 | kafka-server-start.sh -daemon $KAFKA_HOME/config/server-1.properties & |
验证启动 Kafka
用 jps
查看当前所有的 Java 进程 pid如下:
1 | [root@hadoop config]# jps |
可以看到 Kafka
进程已经启动。
创建一个 topic
1 | kafka-topics.sh --create --zookeeper hadoop:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic |
(PS: 创建 topic
相当于指定 zookeeper
,这里是一个分区三个副本)
查看所有 topic
1 | kafka-topics.sh --list --zookeeper hadoop:2181 |
发送消息
1 | kafka-console-producer.sh --broker-list hadoop:9093,hadoop:9094,hadoop:9095 --topic my-replicated-topic |
(PS: 发送消息相当于指定 broker
)
消费消息
1 | kafka-console-consumer.sh --zookeeper hadoop:2181 --topic my-replicated-topic |
(PS: 消费消息相当于指定 zookeeper
。 from-beginning
的意思为是否从开始消费,根据实际需求决定是否添加)
验证发送消息与消费消息
在发送端发送消息,看看在消费消息端是否能看到。
查看 topic 详情
查看所有 topic 详情
1 | kafka-topics.sh --describe --zookeeper hadoop:2181 |
查看指定 topic 详情
1 | kafka-topics.sh --describe --zookeeper hadoop:2181 --topic my-replicated-topic |
Kafka 容错性测试
前期准备
容错测试基于 Kafka单节点多broker的部署及使用
查看指定 topic 详情
1 | kafka-topics.sh --describe --zookeeper hadoop:2181 --topic my-replicated-topic |
结果如下:
1 | Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs: |
可以得出有一个副本、三个分区,主节点是1号分区,在运行着的有1、2、3
用 jps -m
查看当前所有的 Java 进程 pid
1 | 2640 Kafka /abs/app/kafka_2.11-0.9.0.0/config/server-3.properties |
验证发送消息与消费消息1
关闭从节点的进程 server-2.properties
,进程号可以看出是 2581,命令如下:
1 | kill -9 2581 |
再查看当前所有的 Java 进程
1 | [root@hadoop tmp]# jps -m |
在发送端发送消息,看看在消费消息端是否能看到。
经过测试发现可以从消费信息端接收到发送消息端发出的消息。
然而查看 my-replicated-topic
详情
1 | kafka-topics.sh --describe --zookeeper hadoop:2181 --topic my-replicated-topic |
结果如下:
1 | Topic:my-replicated-topic PartitionCount:1 Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs: |
可以得出有一个副本、三个分区,主节点是1号分区,在运行着的有1、3
2号从节点的故障并没有影响 Kafka 的正常运行
验证发送消息与消费消息2
关闭主节点的进程 server-1.properties
,进程号可以看出是 2522,命令如下:
1 | kill -9 2522 |
在发送端发送消息,看看在消费消息端是否能看到。
经过测试发现可以从消费信息端接收到发送消息端发出的消息。
然而查看 my-replicated-topic
详情
1 | kafka-topics.sh --describe --zookeeper hadoop:2181 --topic my-replicated-topic |
结果如下:
1 | Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs: |
可以得出有一个副本、三个分区,主节点是3号,在运行着的只有3号节点
1、2号从节点的故障并没有影响 Kafka 的正常运行,自动选举3号节点为主节点
Kafka 的容错性得到了证明