![4871dba82d9e8a7dc765f0c735be3b75.png](https://img-blog.csdnimg.cn/img_convert/4871dba82d9e8a7dc765f0c735be3b75.png)
Kafka集群部署指南
一、前言
1、Kafka简介
Kafka是一个开源的分布式消息引擎/消息中间件,同时Kafka也是一个流处理平台。Kakfa支持以发布/订阅的方式在应用间传递消息,同时并基于消息功能添加了Kafka Connect、Kafka Streams以支持连接其他系统的数据(Elasticsearch、Hadoop等)
Kafka最核心的最成熟的还是他的消息引擎,所以Kafka大部分应用场景还是用来作为消息队列削峰平谷。另外,Kafka也是目前性能最好的消息中间件。
2、Kafka架构
![14c53424566b8dc159e6ba3bc3279f39.png](https://img-blog.csdnimg.cn/img_convert/14c53424566b8dc159e6ba3bc3279f39.png)
在Kafka集群(Cluster)中,一个Kafka节点就是一个Broker,消息由Topic来承载,可以存储在1个或多个Partition中。发布消息的应用为Producer、消费消息的应用为Consumer,多个Consumer可以促成Consumer Group共同消费一个Topic中的消息。
![f6eb8e49bf9df43a9f5517706f033f4a.png](https://img-blog.csdnimg.cn/img_convert/f6eb8e49bf9df43a9f5517706f033f4a.png)
3、准备工作
1、Kafka服务器
准备3台CentOS服务器,并配置好静态IP、主机名
![47303a6df360070bbd66972787044f76.png](https://img-blog.csdnimg.cn/img_convert/47303a6df360070bbd66972787044f76.png)
软件版本说明
![9eeaf1c318a010c345b94757a9ebca29.png](https://img-blog.csdnimg.cn/img_convert/9eeaf1c318a010c345b94757a9ebca29.png)
2、ZooKeeper集群
Kakfa集群需要依赖ZooKeeper存储Broker、Topic等信息,这里我们部署三台ZK
参考下一篇:
奇哥:ELK-基础系列(六)-ELK加入消息队列-Zookeeperzhuanlan.zhihu.com![23709a7e84cc0bb637b64bfc908f11d9.png](https://img-blog.csdnimg.cn/img_convert/23709a7e84cc0bb637b64bfc908f11d9.png)
二、部署过程
1、应用&数据目录
#创建应用目录
mkdir /usr/kafka
#创建Kafka数据目录
mkdir /kafka
# 创建日志目录
mkdir /kafka/logs
chmod 777 -R /kafka
2、下载&解压
Kafka官方下载地址:https://kafka.apache.org/down... 这次我下载的是2.3.0版本
#进入 opt下
kafka_2.12-2.3.0.tgz 其中2.12是Scala编译器的版本,2.3.0才是Kafka的版本
3、Kafka节点配置
#进入应用目录
cd /usr/kafka/kafka_2.12-2.3.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=elk-1:2181,elk-2:2181,elk-3:2181
分节点配置
- Kafka01
broker.id=0
#listeners=PLAINTEXT://:9092
listeners=PLAINTEXT://elk-1:9092
- Kafka02
broker.id=1
#listeners=PLAINTEXT://:9092
listeners=PLAINTEXT://elk-2:9092
- Kafka03
broker.id=2
#listeners=PLAINTEXT://:9092
listeners=PLAINTEXT://elk-3:9092
5、启动Kafka
#进入kafka根目录
cd /usr/kafka/kafka_2.12-2.3.0/
#启动
nohup ./bin/kafka-server-start.sh config/server.properties &
#启动成功输出示例(最后几行)
[2019-06-26 21:48:57,183] INFO Kafka commitId: fc1aaa116b661c8a (org.apache.kafka.common.utils.AppInfoParser)
[2019-06-26 21:48:57,183] INFO Kafka startTimeMs: 1561531737175 (org.apache.kafka.common.utils.AppInfoParser)
[2019-06-26 21:48:57,185] INFO [KafkaServer id=0] started (kafka.server.KafkaServer)
三、Kafka测试
1、创建Topic
在kafka01(Broker)上创建测试Tpoic:test-ken-io,这里我们指定了3个副本、1个分区
bin/kafka-topics.sh --create --bootstrap-server 192.168.88.51:9092 --replication-factor 3 --partitions 1 --topic test-ken-io
Topic在kafka01上创建后也会同步到集群中另外两个Broker:kafka02、kafka03
2、查看Topic
我们可以通过命令列出指定Broker的
bin/kafka-topics.sh --list --bootstrap-server 192.168.88.52:9092
3、发送消息
这里我们向Broker(id=0)的Topic=test-ken-io发送消息
bin/kafka-console-producer.sh --broker-list 192.168.88.51:9092 --topic test-ken-io
#消息内容
> test by ken.io
4、消费消息
在Kafka02上消费Broker03的消息
bin/kafka-console-consumer.sh --bootstrap-server 192.168.88.53:9092 --topic test-ken-io --from-beginning
在Kafka03上消费Broker02的消息
bin/kafka-console-consumer.sh --bootstrap-server 192.168.88.52:9092 --topic test-ken-io --from-beginning
然后均能收到消息
test by ken.io
这是因为这两个消费消息的命令是建立了两个不同的Consumer 如果我们启动Consumer指定Consumer Group Id就可以作为一个消费组协同工,1个消息同时只会被一个Consumer消费到
bin/kafka-console-consumer.sh --bootstrap-server 192.168.88.53:9092 --topic test-ken-io --from-beginning --group testgroup_ken
bin/kafka-console-consumer.sh --bootstrap-server 192.168.88.52:9092 --topic test-ken-io --from-beginning --group testgroup_ken
四、备注
1、Kafka常用配置项说明
Kafka常用Broker配置说明:
![a6f26db6830aacbee21e135395e76d94.png](https://img-blog.csdnimg.cn/img_convert/a6f26db6830aacbee21e135395e76d94.png)