参考链接: https://ken.io/note/kafka-cluster-deploy-guide
一.前言
1.1kafka简介
Kafka是一个开源的分布式消息引擎/消息中间件,同时Kafka也是一个流处理平台。Kakfa支持以发布/订阅的方式在应用间传递消息,同时并基于消息功能添加了Kafka Connect、Kafka Streams以支持连接其他系统的数据(Elasticsearch、Hadoop等)
Kafka最核心的最成熟的还是他的消息引擎,所以Kafka大部分应用场景还是用来作为消息队列削峰平谷。另外,Kafka也是目前性能最好的消息中间件。
1.2kafka架构
在Kafka集群(Cluster)中,一个Kafka节点就是一个Broker,消息由Topic来承载,可以存储在1个或多个Partition中。发布消息的应用为Producer、消费消息的应用为Consumer,多个Consumer可以促成Consumer Group共同消费一个Topic中的消息。
概念/对象 | 简单说明 |
---|---|
Broker | kafka节点 |
Topic | 主题,用来承载消息 |
Partition | 分区,用于主题分片存储 |
Producer | 生产者,向主题发布消息的应用 |
Consumer | 消费者,从主题订阅消息的应用 |
Consumer Group | 消费者组,由多个消费者组成 |
1.3准备工作
- 1.kafka服务器
准备3台CentOS服务器,并配置好静态IP、主机名
服务器名 | IP | 说明 |
---|---|---|
zookeeper01 | 192.168.172.8 | zookeeper+kafka节点1 |
zookeeper02 | 192.168.172.9 | zookeeper+kafka节点2 |
zookeeper03 | 192.168.172.10 | zookeeper+kafka节点3 |
- 2.软件版本说明
项 | 说明 |
---|---|
Linux Server | Centos 7 |
Kafka | 2.2.0 |
zookeeper的部署过程,参考:https://www.cnblogs.com/even160941/p/14666971.html
二.部署过程
2.1应用&数据目录
- 创建应用目录
mkdir /usr/kafka
- 创建Kafka数据目录
mkdir /kafka
mkdir /kafka/logs
chmod 777 -R /kafka
2.2下载&解压
Kafka官方下载地址:https://kafka.apache.org/downloads
这里下载的是2.2版本的kafka
- 创建并进入下载目录
mkdir /home/downloads
cd /home/downloads
-
下载安装包
下载链接:https://mirrors.tuna.tsinghua.edu.cn/apache/kafka
-
解压到应用目录
tar -zvxf kafka_2.12-2.2.0.tgz -C /usr/kafka
kafka_2.12-2.2.0.tgz 其中2.12是Scala编译器的版本,2.2.0才是Kafka的版本
2.3Kafka节点配置
- 进入应用目录
cd /usr/kafka/kafka_2.12-2.2.0/
- 修改配置文件
vim config/server.properties
- 通用配置
配置日志目录、指定ZooKeeper服务器
# A comma separated list of directories under which to store log files
log.dirs=/kafka/logs
# root directory for all kafka znodes.
zookeeper.connect=192.168.88.21:2181,192.168.88.22:2181,192.168.88.23:2181
- 分节点配置
Kafka01:
broker.id=0
Kafka02:
broker.id=1
Kafka03
broker.id=2
2.4防火墙配置
- 有两种方式配置:
1.开放端口
firewall-cmd --add-port=9092/tcp --permanent
重新加载防火墙配置
firewall-cmd --reload
2.关闭防火墙&selinux==disabled
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
getenforce
vim /etc/selinux/config
SELINUX=disabled
2.5.启动Kafka
进入kafka根目录
cd /usr/kafka/kafka_2.12-2.2.0/
启动
/bin/kafka-server-start.sh config/server.properties &
启动成功输出示例(最后几行)
[2021-04-16 03:39:52,597] INFO Kafka commitId: fc1aaa116b661c8a (org.apache.kafka.common.utils.AppInfoParser)
[2021-04-16 03:39:52,597] INFO Kafka startTimeMs: 1561531737175 (org.apache.kafka.common.utils.AppInfoParser)
[2021-04-16 03:39:52,598] INFO [KafkaServer id=0] started (kafka.server.KafkaServer)
三.Kafka测试
3.1创建Topic
在zookeeper01(kafka01)(Broker)上创建测试Topic:test,这里我们指定了3个副本、1个分区
bin/kafka-topics.sh --create --bootstrap-server 192.168.172.8:9092 --replication-factor 3 --partitions 1 --topic test
topic在zookeeper01(kafka01)上创建后也会同步到集群中另外两个Broker:zookeeper02(kafka02)、zookeeper03(kafka03)
3.2查看Topic
我们可以通过命令列出指定Broker的
bin/kafka-topics.sh --list --bootstrap-server 192.168.172.8:9092
3.3发送消息
这里我们向Broker(id=0)的Topic=test发送消息
bin/kafka-console-producer.sh --broker-list 192.168.172.8:9092 --topic test
消息内容
test hhh
3.4消费消息
在zookeeper02(kafka02)上消费Broker03的消息
bin/kafka-console-consumer.sh --bootstrap-server 192.168.172.10:9092 --topic test --from-beginning
在zookeeper03(kafka03)上消费Broker02的消息
bin/kafka-console-consumer.sh --bootstrap-server 192.168.172.9:9092 --topic test --from-beginning
然后均能收到消息
test hhh
这是因为这两个消费消息的命令是建立了两个不同的Consumer
如果我们启动Consumer指定Consumer Group Id就可以作为一个消费组协同工,1个消息同时只会被一个Consumer消费到
bin/kafka-console-consumer.sh --bootstrap-server 192.168.172.9:9092 --topic test --from-beginning --group test
bin/kafka-console-consumer.sh --bootstrap-server 192.168.172.10:9092 --topic test --from-beginning --group test
四.备注
4.1kafka常用配置项说明
kafka常用broker配置说明: