前言
Kafka是一个开源的分布式流处理平台,具有高吞吐低延时的特性,适合实时数据管道,消息队列等场景。本文将从零开始演示如何搭建一个高可用的Kafka分布式集群,以及如何配置认证功能提高安全性。
Kafka组件
在部署kafka前,我们先来了解下kafka的基本组件:
组件 | 用途 |
---|---|
Producer | 数据生产者,将消息发布到kafka的Topic中(如日志流数据) |
Consumer | 消费者,从Topic中订阅和处理消息 |
Broker | kafka服务器节点,负责存储和转发消息 |
Topic | 消息主题,从逻辑上将数据流进行分类 |
Partition | 分区,通常一个Topic会分为多个Partition(有序),提高并行性 |
Offset | 消息在Partition中的唯一位置标识 |
Replica | 副本,为了保证数据可用性,每个Partition都会有若干个副本 |
kafka部署
从kafka 2.8+开始支持不依赖zookeeper的KRaft模式运行,生产环境建议从Kafka 3.3+版本开始使用;
在部署集群前,先了解如何部署一个kafka实例,这里使用docker方式;
mkdir -p kafka-broker/data && cd kafka-broker && chown 1001.1001 -R data
vim docker-compose.yml
--
services:
kafka-broker1:
image: bitnami/kafka:3.9
container_name: kafka-broker1
restart: unless-stopped
network_mode: host
environment:
- TZ=Asia/Shanghai
# 启用KRaft模式必要配置
- KAFKA_ENABLE_KRAFT=yes
# Kafka节点的ID
- KAFKA_CFG_NODE_ID=1
# 节点的角色,这里既是控制器也是代理
- KAFKA_CFG_PROCESS_ROLES=controller,broker
# 控制器仲裁投票者的配置
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@10.0.0.82:9093
# 定义了监听的端口和协议
- KAFKA_CFG_LISTENERS=PLAINTEXT://10.0.0.82:9092,CONTROLLER://10.0.0.82:9093
# 对外公布的监听器地址
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://10.0.0.82:9092
# 监听协议映射,这里是明文
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
# 控制器监听器的名称(负责管理集群元数据、协调分区副本状态等关键任务)
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
# 代理间通信的监听器名称(Broker之间进行同步元数据、复制消息等)
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT
# 允许自动创建Topic
- KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true
# 消息刷盘间隔
- KAFKA_CFG_LOG_FLUSH_INTERVAL_MESSAGES=10000
# 日志保留时间(小时)
- KAFKA_CFG_LOG_RETENTION_HOURS=72
# 设置默认的副本数
- KAFKA_CFG_DEFAULT_REPLICATION_FACTOR=1
# 设置默认的分区数
- KAFKA_CFG_NUM_PARTITIONS=2
volumes:
# 配置文件目录: /opt/bitnami/kafka/config
# 数据目录: /bitnami/kafka
- /etc/localtime:/etc/localtime:ro
- ./data:/bitnami/kafka
--
docker compose up -d
docker compose ps
测试消息生产/消费;
# 创建一个topic(不指定分区和副本数则按照默认的值生成)
docker exec -it kafka-broker1 kafka-topics.sh --create \
--bootstrap-server 10.0.0.82:9092 \
--replication-factor 1 \
--partitions 1 \
--topic demo
# 查看topic信息
docker exec -it kafka-broker1 kafka-topics.s