Kafka集群环境的搭建
一、Kafka集群环境的重要性
-
数据处理和分发:Kafka被用于数据处理和分发系统,因为它能够高效地处理大规模的数据流。一个稳定可靠的Kafka集群环境可以确保数据的可靠传输和存储。
-
Kafka集群环境可以用于实时流处理,支持实时数据的传输、处理和分析。
-
Kafka集群环境可以作为数据的中心化存储和备份平台,确保数据的安全性和可靠性。
-
通过搭建Kafka集群环境,可以实现分布式的消息处理和存储,具备弹性和高可用性,能够应对大量数据和高并发的处理需求。
-
Kafka集群环境可以根据需求进行横向扩展,以满足不断增长的数据规模和业务需求,并且支持性能的优化和调整。
二、准备工作
硬件需求:
-
建议至少三台服务器用于构建一个基本的高可用性Kafka集群。
-
建议使用多核处理器、大内存容量和快速的存储设备,以确保高性能和可靠性。
在规划Kafka集群环境的硬件时,要综合考虑数据处理需求、性能、可靠性和安全性等因素,以确保构建一个稳定、高性能、可扩展和高可用的Kafka集群环境。
软件组件的选型与版本选择:
-
选择最新的稳定版本的Apache Kafka。始终推荐使用公认的稳定版本,以获取最新的功能和安全更新。同时,确保使用Kafka官方发布的版本而不是开发版本或预览版。
-
Linux是部署Kafka的首选操作系统,因为它对于高性能、可靠性和网络负载具有良好的支持。
-
Kafka需要Java环境来运行,选择官方推荐的版本:JDK 8/11/16。
配置Kafka集群的网络和安全设置:
-
网络配置:为每台服务器分配静态IP地址,确保在集群中能够稳定地进行通信。为每台服务器设置唯一的主机名,方便在集群中进行识别和通信。
-
配置防火墙规则:Kafka使用的端口包括9092(用于Broker之间的通信)、2181(用于ZooKeeper)、9094(用于TLS/SSL加密通信)等。
三、多节点Kafka集群部署
由于资源有限,博主只准备了两台服务器:
服务器 | IP |
---|---|
1号 | 192.168.11.59 |
2号 | 192.168.11.235 |
3.1、 zookeeper部署
zookeeper先只部署一台,在1号机器(192.168.11.59)上启动zookeeper。
sh zookeeper-server-start.sh -daemon ../config/zookeeper.properties
注意:shell脚本在kafka安装目录的bin文件夹中。
3.2、 启动1号机器的broker
(1)修改server.properties(在config目录)。
broker.id=0
zookeeper.connect=192.168.11.59:2181
修改broker.id(也可以改为-1,自动分配)和配置对应的zookeeper ip地址。
(2)启动kafka。
sh kafka-server-start.sh -daemon ../config/server.properties
默认端口为:9092,可以通过命令lsof -i:9092查看kafka是否启动成功。
$ lsof -i:9092
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 84858 fly 152u IPv6 802800 0t0 TCP *:9092 (LISTEN)
java 84858 fly 168u IPv6 813310 0t0 TCP localhost:50918->fly-virtual-machine:9092 (CLOSE_WAIT)
java 84858 fly 172u IPv6 810764 0t0 TCP localhost:50920->fly-virtual-machine:9092 (CLOSE_WAIT)
java 84858 fly 180u IPv6 812452 0t0 TCP localhost:50924->fly-virtual-machine:9092 (ESTABLISHED)
java 84858 fly 181u IPv6 810766 0t0 TCP fly-virtual-machine:9092->localhost:50924 (ESTABLISHED)
java 84858 fly 186u IPv6 815339 0t0 TCP 192.168.11.59:9092->192.168.11.59:42758 (ESTABLISHED)
java 84858 fly 187u IPv6 815340 0t0 TCP fly-virtual-machine:9092->localhost:50978 (ESTABLISHED)
java 84858 fly 188u IPv6 815341 0t0 TCP fly-virtual-machine:9092->localhost:50980 (ESTABLISHED)
java 88485 fly 89u IPv6 813836 0t0 TCP 192.168.11.59:42758->192.168.11.59:9092 (ESTABLISHED)
java 88485 fly 90u IPv6 813837 0t0 TCP localhost:50978->fly-virtual-machine:9092 (ESTABLISHED)
java 88485 fly 91u IPv6 813838 0t0 TCP localhost:50980->fly-virtual-machine:9092 (ESTABLISHED)
3.3、 启动2号机器的broker
(1)修改server.properties(在config目录)。
broker.id=1
zookeeper.connect=192.168.11.59:2181
修改broker.id(也可以改为-1,自动分配)和配置对应的zookeeper ip地址。
(2)启动kafka。
sh kafka-server-start.sh -daemon ../config/server.properties
默认端口为:9092,可以通过命令lsof -i:9092查看kafka是否启动成功。
3.4、查看kafka集群
(1)创建主题。
sh kafka-topics.sh --create --zookeeper 192.168.11.59:2181 -replication-factor 2 --partitions 2 --topic kafka-2
(2)查看主题。
sh kafka-topics.sh --describe --zookeeper 192.168.11.59:2181 --topic kafka-2
显示消息:
Topic:kafka-2 PartitionCount:2 ReplicationFactor:2 Configs:
Topic: kafka-2 Partition: 0 Leader: 1 Replicas: 1,0 Isr: 1,0
Topic: kafka-2 Partition: 1 Leader: 0 Replicas: 0,1 Isr: 0
3.5、测试集群
开启一个生产者,两个消费者。当两个消费者同属一个消费组开启后,消费者轮流收到发送者的数据。
(1)生产者:
sh kafka-console-producer.sh --broker-list 192.168.11.59:9092 --topic kafka-2
(2)消费者:
sh kafka-console-consumer.sh --bootstrap-server 192.168.11.59:9092 --topic kafka-2
默认是group 0,也可以指定,比如:
sh kafka-console-consumer.sh --bootstrap-server 192.168.31.249:9092 --topic kafka-2 --group 0 --from-beginning
kafka-console-consumer.sh部分支持的参数:
参数 | 值类型 | 说明 | 有效值 |
---|---|---|---|
–topic | string | 被消费的topic | |
-partition | integer | 指定分区 除非指定’–offset’,否则从分区结束(latest)开始消费 | |
–offset | string | 执行消费的起始offset位置 默认值:latest | latest、earliest |
–consumer-property | string | 将用户定义的属性以key=value的形式传递给使用者 | |
–consumer.config | string | 消费者配置属性文件 请注意,[consumerproperty]优先于此配置 | |
–from-beginning | 从存在的最早消息开始,而不是从最新消息开始 | ||
–group | string | 指定消费者所属组的ID |
总结
本节演示了一个zookeeper加两个broker的部署,实际使用总只是三个zookeeper,三个broker。部署方式相同。
在构建Kafka集群环境时,还需要考虑使用监控和管理工具,例如Prometheus、Grafana、Kafka Manager等,以便对Kafka集群进行监控、管理和故障排除。