为什么使用 Kafka 消息中间件
- 缓冲/消峰:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况
- 解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。
- 异步通信:允许用户把一个消息放入队列,但并不立即处理它,然后在需要的时候再去处理它们。
Kafka 集群环境安装部署
解压安装包
Kafka 的版本,从Kafka 的安装包中就可以看出对应的版本号。
- kafka_2.11-2.4.0.tgz 中包含2个版本号。其中前面第一个版本是 Scala 的版本,第二个版本才是 Kafka 真正的版本。
本次集群环境搭建使用的版本是 2.4.0 的版本
本次使用 10.0.24.12、10.0.24.13、10.0.24.14 三台计算机搭建 Kafka 的集群环境
# 10.0.24.12 节点中进行解压
tar -zxvf kafka_2.11-2.4.0.tgz -C /usr/local/
# 10.0.24.13 节点中进行解压
tar -zxvf kafka_2.11-2.4.0.tgz -C /usr/local/
# 10.0.24.14 节点中进行解压
tar -zxvf kafka_2.11-2.4.0.tgz -C /usr/local/
解压完成之后查看
# 10.0.24.12 节点
drwxr-xr-x 8 root root 4096 Mar 8 14:53 kafka
# 10.0.24.12 节点
drwxr-xr-x 8 root root 4096 Mar 8 14:53 kafka
# 10.0.24.13 节点
drwxr-xr-x 8 root root 4096 Mar 8 14:53 kafka
修改配置文件
Kafka 解压完成之后,需要我们进行配置文件的修改。
Kafka 主要使用的配置文件是 server.properties 配置文件,我们只需要对其中的内容进行修改即可。
配置文件中有三个内容是最基础的配置
- 配置 10.0.24.12 这台服务器节点的 ***server.properties ***配置文件
### 配置 broker id
broker.id=0
### 配置 kafka 文件存储位置 (注意:不要使用默认的 /tmp 临时目录)
log.dirs=/usr/local/kafka/data
### 配置 listeners 监听。(其实就是监听的 ip + 端口号)
listeners=PLAINTEXT://10.0.24.12:9092
# Hostname and port the broker will advertise to producers and consumers. If not set,
# it uses the value for "listeners" if configured. Otherwise, it will use the value
# returned from java.net.InetAddress.getCanonicalHostName().
### 这里这个参数可以不进行设置,
### 但是,当前我这台服务器使用的一台云服务器,如果我们想通过公网访问kafka 的9092 端口,这里就需要将公网地址写上。
advertised.listeners=PLAINTEXT://111.44.151.117:9092
### 配置 zookeeper 的地址。kafka 需要使用zk, 因此我们需要指定zk 的地址。(可以使用 集群,也可以使用单机版本的 zk)
zookeeper.connect=10.0.24.09:2181,10.0.24.10:2181,10.0.24.11:2181/kafka
依次登录 10.0.24.13、10.0.24.14 剩余2台服务器的配置。
对剩余2台服务器的配置文件的配置,基本就是重复上面的步骤,但是 注意 broker.id 的值需要进行修改。
所谓的这个 broker.id 其实就是集群环境中节点的唯一标识。
比如
broker.id=1
broker.id=2
至此,三台机器的配置文件依次修改完毕,Kafka 的集群模式就已经搭建完毕了 !!!
Kafka 目录结构介绍
- bin 目录中主要是可执行的脚本
- conf 目录中主要是一些配置文件
drwxr-xr-x 3 root root 4096 Apr 14 10:43 bin
drwxr-xr-x 2 root root 4096 Apr 18 16:22 config
drwxr-xr-x 2 root root 4096 Mar 8 11:50 libs
-rw-r--r-- 1 root root 32216 Dec 10 2019 LICENSE
drwxr-xr-x 2 root root 94208 Apr 18 16:00 logs
-rw-r--r-- 1 root root 337 Dec 10 2019 NOTICE
drwxr-xr-x 2 root root 4096 Dec 10 2019 site-docs
### bin 目录中可执行的脚本
-rwxr-xr-x 1 root root 1421 Dec 10 2019 connect-distributed.sh
-rwxr-xr-x 1 root root 1394 Dec 10 2019 connect-mirror-maker.sh
-rwxr-xr-x 1 root root 1418 Dec 10 2019 connect-standalone.sh
-rwxr-xr-x 1 root root 861 Dec 10 2019 kafka-acls.sh
-rwxr-xr-x 1 root root 873 Dec 10 2019 kafka-broker-api-versions.sh
-rwxr-xr-x 1 root root 864 Dec 10 2019 kafka-configs.sh
-rwxr-xr-x 1 root root 945 Dec 10 2019 kafka-console-consumer.sh
-rwxr-xr-x 1 root root 944 Dec 10 2019 kafka-console-producer.sh
-rwxr-xr-x 1 root root 871 Dec 10 2019 kafka-consumer-groups.sh
-rwxr-xr-x 1 root root 948 Dec 10 2019 kafka-consumer-perf-test.sh
-rwxr-xr-x 1 root root 871 Dec 10 2019 kafka-delegation-tokens.sh
-rwxr-xr-x 1 root root 869 Dec 10 2019 kafka-delete-records.sh
-rwxr-xr-x 1 root root 866 Dec 10 2019 kafka-dump-log.sh
-rwxr-xr-x 1 root root 870 Dec 10 2019 kafka-leader-election.sh
-rwxr-xr-x 1 root root 863 Dec 10 2019 kafka-log-dirs.sh
-rwxr-xr-x 1 root root 862 Dec 10 2019 kafka-mirror-maker.sh
-rwxr-xr-x 1 root root 886 Dec 10 2019 kafka-preferred-replica-election.sh
-rwxr-xr-x 1 root root 959 Dec 10 2019 kafka-producer-perf-test.sh
-rwxr-xr-x 1 root root 874 Dec 10 2019 kafka-reassign-partitions.sh
-rwxr-xr-x 1 root root 874 Dec 10 2019 kafka-replica-verification.sh
-rwxr-xr-x 1 root root 9633 Dec 10 2019 kafka-run-class.sh
-rwxr-xr-x 1 root root 1424 Apr 14 10:43 kafka-server-start.sh
-rwxr-xr-x 1 root root 997 Dec 10 2019 kafka-server-stop.sh
-rwxr-xr-x 1 root root 945 Dec 10 2019 kafka-streams-application-reset.sh
-rwxr-xr-x 1 root root 863 Dec 10 2019 kafka-topics.sh
-rwxr-xr-x 1 root root 958 Dec 10 2019 kafka-verifiable-consumer.sh
-rwxr-xr-x 1 root root 958 Dec 10 2019 kafka-verifiable-producer.sh
-rwxr-xr-x 1 root root 1722 Dec 10 2019 trogdor.sh
drwxr-xr-x 2 root root 4096 Dec 10 2019 windows
-rwxr-xr-x 1 root root 867 Dec 10 2019 zookeeper-security-migration.sh
-rwxr-xr-x 1 root root 1393 Dec 10 2019 zookeeper-server-start.sh
-rwxr-xr-x 1 root root 1001 Dec 10 2019 zookeeper-server-stop.sh
-rwxr-xr-x 1 root root 968 Dec 10 2019 zookeeper-shell.sh
### conf 配置文件目录。server.properties 配置文件就是 kafka 集群环境中需要配置使用的配置文件。
-rw-r--r-- 1 root root 906 Dec 10 2019 connect-console-sink.properties
-rw-r--r-- 1 root root 909 Dec 10 2019 connect-console-source.properties
-rw-r--r-- 1 root root 5321 Dec 10 2019 connect-distributed.properties
-rw-r--r-- 1 root root 883 Dec 10 2019 connect-file-sink.properties
-rw-r--r-- 1 root root 881 Dec 10 2019 connect-file-source.properties
-rw-r--r-- 1 root root 2247 Dec 10 2019 connect-log4j.properties
-rw-r--r-- 1 root root 1539 Dec 10 2019 connect-mirror-maker.properties
-rw-r--r-- 1 root root 2262 Dec 10 2019 connect-standalone.properties
-rw-r--r-- 1 root root 1221 Dec 10 2019 consumer.properties
-rw-r--r-- 1 root root 4675 Dec 10 2019 log4j.properties
-rw-r--r-- 1 root root 1925 Dec 10 2019 producer.properties
-rw-r--r-- 1 root root 6984 Mar 8 23:23 server.properties
-rw-r--r-- 1 root root 1032 Dec 10 2019 tools-log4j.properties
-rw-r--r-- 1 root root 1169 Dec 10 2019 trogdor.conf
-rw-r--r-- 1 root root 1441 Dec 10 2019 zookeeper.properties
Kafka 启动停止
Kafka 的启动
Kafka 集群环境的启动,只需要依次启动三台服务器节点即可。
./kafka-server-start.sh -daemon ../config/server.properties
- -daemon 表示以后台的方式启动
- ../config/server.properties 指定server.properties 文件的位置
### 启动 10.0.24.12 节点
./kafka-server-start.sh -daemon ../config/server.properties
### 启动 10.0.24.13 节点
./kafka-server-start.sh -daemon ../config/server.properties
### 启动 10.0.24.14 节点
./kafka-server-start.sh -daemon ../config/server.properties
在三台机器中依次执行启动命令。三个 Kafka 集群节点就启动成功
查看 Kafka 是否启动成功。
查看 Kafka 是否启动成功,我们可以查看zookeeper中节点对应的内容。
下面的执行结果可以看出,Zookeeper 中已经有了 Kafka 中的节点。
其中 [ 0, 1, 2] 其实就是我们在配置文件中配置的 broker.id 的值。
[zk: localhost:2181(CONNECTED) 4] ls /kafka/brokers/ids
[0, 1, 2]
Kafka 的停止
Kafka 的停止,依次在三台节点中执行 stop 脚本即可。
### 结束 10.0.24.12 节点
./kafka-server-stop.sh
### 结束 10.0.24.13 节点
./kafka-server-stop.sh
### 结束 10.0.24.14 节点
./kafka-server-stop.sh
命令行操作 topic
Topic 主题。是一个逻辑上的概念,目的是为了对消息进行分类。
不同种类的消息使用不同的 Topic 。 这样便于业务的逻辑区分。也更加的清晰,明了。
创建 topic 主题
### 创建 yanxu-test 主题topic。 三个分区,3个副本。
bin/kafka-topics.sh --create --zookeeper 10.0.24.12:2181/kafka --replication-factor 3 --partitions 3 --topic yanxu-test
查看已经创建的主题
### 查看已经创建的主题
[root@10 bin]# ./kafka-topics.sh --list --zookeeper 10.0.24.12:2181/kafka
__consumer_offsets
__transaction_state
my-replicated-topic
my-topic-001
yanxu-data-topic
yanxu-study01
yanxu-study02
yanxu-topi
yyaann
查看某个具体的 topic 主题信息
### 查看某个主题的具体的信息 --describe
### 从中,我们可以看出分区、副本,leader , isr 等信息。
[root@10 bin]# ./kafka-topics.sh --bootstrap-server 10.0.24.12:9092 --describe --topic yyaann
Topic: yyaann PartitionCount: 3 ReplicationFactor: 3 Configs: segment.bytes=1073741824
Topic: yyaann Partition: 0 Leader: 2 Replicas: 2,0,1 Isr: 2,0,1
Topic: yyaann Partition: 1 Leader: 0 Replicas: 0,1,2 Isr: 0,1,2
Topic: yyaann Partition: 2 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0
删除某个topic 主题
### 删除 yyaann 主题
[root@10 bin]# ./kafka-topics.sh --bootstrap-server 10.0.24.12:9092 --delete --topic yyaann
#########################################################
### 再次进行查询所有的 topic 主题
[root@10 bin]# ./kafka-topics.sh --list --zookeeper 10.0.24.12:2181/kafka
__consumer_offsets
__transaction_state
my-replicated-topic
my-topic-001
yanxu-data-topic
yanxu-study01
yanxu-study02
yanxu-topi
yyaann - marked for deletion
#########################################################
#### 此时,可以发现 yyaann 主题已经被标记为 deletion 状态了。
命令行 生产数据、消费数据
生产数据
### 进行生产端生产数据
[root@10 bin]# ./kafka-console-producer.sh --broker-list 10.0.24.12:9092 --topic yanxu-study01
>a
>b
>c
>d
消费数据
Kafka 在进行消费的时候,默认是消费最新的消息。
但是,我们也可以指定参数 --from-beginning 表示从开始的位置开始进行消费。
方式一:从最后一条消息的偏移量+1开始消费
[root@10 bin]# ./kafka-console-consumer.sh --bootstrap-server 10.0.24.12:9092 --topic yanxu-study01
>a
>b
>c
>d
方式二:从头开始消费 ***--from-beginning *** 参数进行处理
[root@10 bin]# ./kafka-console-consumer.sh --bootstrap-server 10.0.24.12:9092 --topic yanxu-study01 --from-beginning
>1
>2
>3
>b
>c
>d
浙公网安备 33010602011771号