kafka集群部署

参考链接: 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配置说明:

4.2附录

https://kafka.apache.org/

https://zh.wikipedia.org/zh-cn/Kafka

原文地址:https://www.cnblogs.com/even160941/p/14667974.html