Kafka集群的搭建与常用命令
Kafka 是一个分布式流处理平台。它最初被设计为一个高吞吐量的分布式发布-订阅消息系统,但随着时间的推移,Kafka已经发展成为一个强大的数据管道和流处理平台,能够处理实时数据流。
Kafka的核心概念和组件
- Broker(代理):Kafka集群中的一台或多台服务器,负责存储消息和复制数据。
- Topic(主题):Kafka中的消息以主题为单位进行归类,生产者发送消息到特定的主题,消费者订阅这些主题以接收消息。
- Producer(生产者):向Kafka主题发送消息的客户端应用程序。
- Consumer(消费者):从Kafka主题读取消息的客户端应用程序。Kafka允许一个主题被多个消费者组消费,每个消费者组内的消费者共同消费主题内的所有消息,但每个消息只会被组内的一个消费者消费(除非配置了不同的消费模式)。
- Partition(分区):Kafka中的每个主题被划分为一个或多个分区,每个分区是一个有序的、不可变的消息序列,这些消息被顺序地追加到分区中。分区使得Kafka能够并行处理数据,提高吞吐量。
- Offset(偏移量):Kafka中每个消息都有一个唯一的偏移量,它标识了消息在分区中的位置。消费者通过跟踪偏移量来知道它已经读取到了哪个位置的消息。
- Replica(副本):Kafka为分区提供了副本机制以提高数据可靠性和容错性。每个分区可以有多个副本,其中一个副本被选为leader,负责处理读写请求,其余副本为follower,它们从leader复制数据以保持与leader的数据一致。
- ZooKeeper:Kafka严重依赖ZooKeeper进行集群管理、配置管理和状态同步。ZooKeeper帮助Kafka存储元数据,如broker信息、topic和partition的元数据等。
Kafka集群部署
Kafka主要开发语言是Java,同时也使用了Scala开发了一些工具,同时Kafka严重依赖Zookeeper进行集群管理,因此在搭建Kafka时需要配置JDK和Scala SDK和Zookeeper集群。
-
安装JDK。
在3台节点中安装JDK1.8
详细安装流程请参考链接:Linux安装JDK -
安装Scala2.12 SDK
在3台节点中安装Scala2.12
详细安装流程请参考链接:Linux安装Scala2.12
-
安装Zookeeper集群
详细安装流程请参考链接:Zookeeper集群部署安装
-
安装Kafka集群
本次案例是将kafka集群安装在master、slaves1、slaves2节点上
4.1 下载Kafka
Kafka官网下载地址为:Apache Kafka,本案例使用的版本为Kafka_2.12_2.4.1的版本。将安装包上传到master节点/root/module目录下。
4.2 解压Kafka安装包
解压安装包到/usr/local目录下,并更改目录名称,方便后期配置。
tar -zxvf kafka_2.12-2.4.1.tgz -C /usr/local mv /usr/local/kafka_2.12-2.4.1 /usr/local/kafka
4.3 配置环境变量
vim /etc/profile
文件下添加Kafka信息到/etc/profile末端。
#KAFKA ENV export KAFKA_HOME=/usr/local/kafka export PATH=$PATH:$KAFKA_HOME/bin
重载环境变量
source /etc/profile
4.4 修改Kafka配置文件
进入kafka的config目录下,修改server.properties文件
cd /usr/local/config/ vim server.properties
在文件中找到对应属性并修改其值。
broker.id=1 #指定broker的id,随意的数字,但是要确保在kafka集群中是唯一不重复的 log.dirs=/opt//data/kafka-logs #指定log的位置 zookeeper.connect=master:2181,slaves1:2181,slaves2:2181 #配置zookeeper
4.5 分发文件到slaves1与slaves2节点
使用scp指令,将配置好的Kafka文件夹分发到另外两个节点中。
scp -r /usr/local/kafka root@slaves1:/usr/local scp -r /usr/local/kafka root@slaves2:/usr/local
在slaves1节点中修改server.properties文件,将broker.id改为2。
#在slaves1节点操作 cd /usr/local/config vim server.properties
将broker.id改为2。
broker.id=2
在slaves2节点中修改server.properties文件,将broker.id改为3。
#在slaves2节点操作 cd /usr/local/config vim server.properties
将broker.id改为3。
broker.id=3
4.6 启动kafka集群。
由于Kafka和Zookeeper没有一键启动的脚本文件,我们可以自己编辑一个一键启动脚本文件,在master节点创建zookeeperServer.sh文件用于一键启动Zookeeper集群,创建kafkaServer.sh文件用于一键启动kafka集群。
zookeeperServer.sh具体代码如下
#!/bin/bash case $1 in "start"){ for i in master,slaves1,slaves2 do a echo "=============$i zookeeper starting=============" ssh $i "source /etc/profile;nohup /usr/local/zookeeper/bin/zkServer.sh start" done };; "stop"){ for i in master,slaves1,slaves2 do echo "=============$i zookeeper stop=============" ssh $i "source /etc/profile;nohup /usr/local/zookeeper/bin/zkServer.sh stop" done };; esac
kafkaServer.sh具体代码如下
#!/bin/bash case $1 in "start"){ for i in master,slaves1,slaves2 do echo "=============$i kafka starting=============" ssh $i "source /usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties" done };; "stop"){ for i in master,slaves1,slaves2 do echo "=============$i kafka stop=============" ssh $i "source/usr/local/kafka/bin/kafka-server-stop.sh" done };; esac
运行两个脚本启动集群
./zookeeperServer.sh start ./kafkaServer.sh start
kafka-topics.sh使用教程
kafka-topics.sh主要负责与topic相关的操作,如:创建,删除,查看等。
-
创建Topic
kafka-topics.sh --create -topic 【topicName】 -zookeeper 【ZKhostname:2181】 -partitions 【n】 -replication-factor 【m】
参数列表详解:
- -topic : 指定创建主题的名称。
- -zookeeper: Zookeeper的hostname或者IP地址,端口号为zookeeper设置时的端口号,一般为2181。
- -partiotions:该主题的分区数量。
- -replication-factor :主题的副本数量(包含leader)。
如:创建一个主题名为KafkaTest,分区数量为3,副本数量为1,具体指令如下:
kafka-topics.sh --create -topic KafkaTest -zookeeper localhost:2181 -partitions 3 -replication-factor 1
-
查看Topic列表
kafka-topics.sh --list -zookeeper 【ZKhostname:2181】
如:查看本机Kafka主题列表,具体指令如下;
kafka-topics.sh --list -zookeeper localhost:2181
-
显示topic详细信息
kafka-topics.sh --describe -topic 【topicName】 -zookeeper 【ZKhostname:2181】
参数列表详解:
- -topic : 查询的主题名称。
- -zookeeper: Zookeeper的hostname或者IP地址,端口号为zookeeper设置时的端口号,一般为2181。
如:查询KafkaTest主题的详细信息,具体指令如下:
kafka-topics.sh --describe -topic KafkaTest -zookeeper localhost:2181
-
更改Topic配置信息
更改主题的分区数量,副本分配和/或配置条目。
kafka-topics.sh --alter -topic 【topicName】 -zookeeper 【ZKhostname:2181】
如:增加分区数量到4个。
kafka-topics.sh --alter -topic KafkaTest -partitions 4 -zookeeper localhost:2181
注意:不要使用 --alter 去尝试减少分区的数量,如果非要减少分区的数量,只能删除整个主题 topic, 然后重新创建。
添加完分区后使用以下指令查看KafkaTest主题的详细信息。
kafka-topics.sh --describe -topic KafkaTest -zookeeper localhost:2181
-
删除Topic
kafka-topics.sh -delete -topic 【topicName】 -zookeeper 【ZKhostname:2181】
参数列表详解:
- -topic : 删除的主题名称。
- -zookeeper: Zookeeper的hostname或者IP地址,端口号为zookeeper设置时的端口号,一般为2181。
如:删除KafkaTest主题,具体指令如下:
kafka-topics.sh -delete -topic KafkaTest -zookeeper localhost:2181
删除成功后,可使用kafka-topics.sh --list指令进行查看主题列表1
kafka-topics.sh --list -zookeeper localhost:2181