kafka介绍
Apache Kafka 是一个开源的分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用。
Kafka是一个拥有高吞吐、可持久化、可水平扩展,支持流式数据处理等多种特性的分布式消息流处理中间件,采用分布式消息发布与订阅机制,在日志收集、流式数据传输、在线/离线系统分析、实时监控等领域有广泛的应用。
基于kraft部署集群
集群节点规划
主机名 | IP 地址 | 角色 | node-id | OS |
---|---|---|---|---|
kafka01 | 192.168.72.31 | broker/controller | 1 | Ubuntu22.04 |
kafka02 | 192.168.72.32 | broker/controller | 2 | Ubuntu22.04 |
kafka03 | 192.168.72.33 | broker/controller | 3 | Ubuntu22.04 |
准备3个节点,每个节点同时作为broker和controller运行。
集群架构如下:
基础环境配置
以下操作在所有节点执行。
配置主机名
hostnamectl set-hostname kafka01
hostnamectl set-hostname kafka02
hostnamectl set-hostname kafka03
配置hosts解析,提前部署zookeeper集群:
cat > /etc/hosts <<EOF
192.168.72.31 kafka01
192.168.72.32 kafka02
192.168.72.33 kafka03
EOF
安装java环境
apt update -y
apt install -y openjdk-21-jdk
创建Kafka用户
sudo groupadd kafka
sudo useradd -m -s /bin/bash -g kafka kafka
sudo passwd kafka
安装kafka
以下操作在所有节点执行。
wget https://dlcdn.apache.org/kafka/3.9.0/kafka_2.13-3.9.0.tgz
tar -zxvf kafka_2.13-3.9.0.tgz -C /opt
ln -s /opt/kafka_2.13-3.9.0 /opt/kafka
配置环境变量
cat > /etc/profile.d/kafka.sh <<'EOF'
export KAFKA_HOME=/opt/kafka
export PATH=$KAFKA_HOME/bin:$PATH
EOF
source /etc/profile
修改配置文件
为broker设置角色,以便他们也可以成为控制器。使用配置属性文件应用broker配置,包括角色设置。broker配置根据角色有所不同。KRaft 提供了三个示例broker配置属性文件。
/opt/kafka/config/kraft/broker.properties
有一个broker角色的示例配置,如果正在配置broker节点,那么需要选择该配置文件/opt/kafka/config/kraft/controller.properties
有一个控制器角色的示例配置,如果正在配置控制器节点,那么需要选择该配置文件/opt/kafka/config/kraft/server.properties
有一个组合角色的示例配置,如果正在配置broker和控制器节点,那么需要选择该配置文件
可以根据这些示例属性文件来配置broker,本示例使用 server.properties
配置。
修改kafka01
节点配置文件
cp /opt/kafka/config/kraft/server.properties{
,.bak}
cat <<EOF > /opt/kafka/config/kraft/server.properties
process.roles=broker,controller
node.id=1
num.partitions=6
default.replication.factor=2
min.insync.replicas=1
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=2
transaction.state.log.min.isr=1
controller.quorum.voters=1@kafka01:9093,2@kafka02:9093,3@kafka03:9093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
advertised.listeners=PLAINTEXT://kafka01:9092
controller.listener.names=CONTROLLER
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
log.dirs=/data/kafka/kraft-combined-logs
log.retention.hours=168
EOF
修改kafka02
节点配置文件
cp /opt/kafka/config/kraft/server.properties{
,.bak}
cat <<EOF > /opt/kafka/config/kraft/server.properties
process.roles=broker,controller
node.id=2
num.partitions=6
default.replication.factor=2
min.insync.replicas=1
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=2
transaction.state.log.min.isr=1
controller.quorum.voters=1@kafka01:9093,