Docker Compose一键部署Kafka与Kafka-UI可视化管理面板
提供一个完整的、经过验证的Docker Compose部署方案,包括Kafka集群和Kafka-UI可视化管理面板,以及Python Kafka生产消费示例。
一、部署Kafka与Kafka-UI
1. 创建目录结构
bash
mkdir -p kafka-compose && cd kafka-compose
2. 创建docker-compose.yml文件
yaml
version: '3.5'
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
container_name: kafka
volumes:
- /etc/localtime:/etc/localtime
ports:
- "9092:9092"
environment:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9092
KAFKA_LISTENERS: INSIDE://0.0.0.0:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT
KAFKA_LISTENER_NAME_SELECTOR: INSIDE
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
depends_on:
- zookeeper
kafka-ui:
image: provectuslabs/kafka-ui
container_name: kafka-ui
ports:
- "8080:8080"
depends_on:
- kafka
environment:
DYNAMIC_CONFIG_ENABLED: 'true'
KAFKA_CLUSTERS_0_NAME: local
KAFKA_CLUSTERS_0_BOOTSTRAP_SERVERS: kafka:9092
3. 启动服务
docker-compose up -d
4. 验证服务状态
docker-compose ps
5. 访问Kafka-UI
打开浏览器访问 http://localhost:8080,即可看到Kafka-UI的登录界面。首次登录无需账号密码,直接进入系统。
二、Python Kafka生产消费示例
1. 安装依赖
pip install kafka-python
2. 生产者代码 (producer.py)
python
from kafka import KafkaProducer
import json
import time
import random
from datetime import datetime
# 配置Kafka服务器地址
BOOTSTRAP_SERVERS = ['localhost:9092']
TOPIC_NAME = 'test_topic'
def create_producer():
"""创建Kafka生产者"""
return KafkaProducer(
bootstrap_servers=BOOTSTRAP_SERVERS,
value_serializer=lambda v: json.dumps(v).encode('utf-8')
)
def generate_mock_data():
"""生成模拟数据"""
user_ids = ['user_001', 'user_002', 'user_003', 'user_004']
actions = ['click', 'view', 'purchase', 'logout', 'login']
return {
"user_id": random.choice(user_ids),
"action": random.choice(actions),
"timestamp": datetime.now().isoformat(),
"value": random.randint(1, 100)
}
def produce_data(producer, topic):
"""持续生产测试数据"""
try:
while True:
# 生成数据
data = generate_mock_data()
# 发送消息
producer.send(topic, value=data)
print(f"Produced message: {data}")
time.sleep(1) # 每秒发送一条
except KeyboardInterrupt:
print("Stopping producer...")
finally:
producer.close()
if __name__ == "__main__":
producer = create_producer()
produce_data(producer, TOPIC_NAME)
3. 消费者代码 (consumer.py)
ini
from kafka import KafkaConsumer
import json
# 创建消费者实例并配置参数
consumer = KafkaConsumer(
'test_topic', # 订阅的主题名
bootstrap_servers=['localhost:9092'], # Kafka服务器地址列表
group_id='mygroup', # 消费者组ID
auto_offset_reset='earliest' # 当没有初始偏移量或当前偏移量无效时,自动重置偏移量到最早的记录
)
# 消费消息循环
for message in consumer:
# 解析消息
data = json.loads(message.value.decode('utf-8'))
print(f"Consumed message: {data}")
三、使用步骤
-
启动Kafka和Kafka-UI:
docker-compose up -d -
运行生产者:
python producer.py -
运行消费者:
python consumer.py -
使用Kafka-UI:
- 访问
http://localhost:8080 - 在Kafka-UI界面中,您可以查看集群状态、主题、消费者组等信息
- 访问
四、常见问题解决
-
Kafka-UI无法访问:
- 确认端口映射是否正确:
- "8080:8080" - 检查容器日志:
docker logs kafka-ui
- 确认端口映射是否正确:
-
Python脚本连接问题:
- 确认Kafka服务已启动:
docker-compose ps - 确认生产者/消费者代码中的
bootstrap_servers与实际端口一致(localhost:9092)
- 确认Kafka服务已启动:
-
Kafka服务启动失败:
- 检查Docker日志:
docker logs kafka - 确认Zookeeper服务已启动(Kafka依赖于Zookeeper)
- 检查Docker日志:
五、Kafka-UI功能简介
Kafka-UI提供了以下实用功能:
- 集群监控:查看集群健康状态、版本信息
- 主题管理:创建、修改、删除主题
- 消费者组管理:查看和管理消费者组
- 实时流量监控:查看生产者和消费者的流量
- 主题详情:查看主题的分区、副本等信息
通过以上步骤,完成Kafka的部署和可视化管理面板的配置,并开始使用Python进行Kafka消息的生产和消费。