Docker Compose一键部署Kafka与Kafka-UI可视化管理面板

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}")

三、使用步骤

  1. 启动Kafka和Kafka-UI

    复制代码
    docker-compose up -d
  2. 运行生产者

    复制代码
    python producer.py
  3. 运行消费者

    复制代码
    python consumer.py
  4. 使用Kafka-UI

    • 访问 http://localhost:8080
    • 在Kafka-UI界面中,您可以查看集群状态、主题、消费者组等信息

四、常见问题解决

  1. Kafka-UI无法访问

    • 确认端口映射是否正确:- "8080:8080"
    • 检查容器日志:docker logs kafka-ui
  2. Python脚本连接问题

    • 确认Kafka服务已启动:docker-compose ps
    • 确认生产者/消费者代码中的bootstrap_servers与实际端口一致(localhost:9092
  3. Kafka服务启动失败

    • 检查Docker日志:docker logs kafka
    • 确认Zookeeper服务已启动(Kafka依赖于Zookeeper)

五、Kafka-UI功能简介

Kafka-UI提供了以下实用功能:

  • 集群监控:查看集群健康状态、版本信息
  • 主题管理:创建、修改、删除主题
  • 消费者组管理:查看和管理消费者组
  • 实时流量监控:查看生产者和消费者的流量
  • 主题详情:查看主题的分区、副本等信息

通过以上步骤,完成Kafka的部署和可视化管理面板的配置,并开始使用Python进行Kafka消息的生产和消费。

相关推荐
回忆是昨天里的海1 天前
docker file-制作镜像
运维·docker·容器
远瞻。1 天前
【博客】前端新手如何创建自己的个人网站相册
前端·docker·博客·反向代理
小张程序人生1 天前
一篇文章全面快速入门Docker
运维·docker·容器
德育处主任1 天前
『NAS』部署轻量级开源图片水印工具-ImageWatermarkTool
前端·javascript·docker
Chris_12191 天前
Termux + 宝塔面板 + Docker 终极部署指南
运维·docker·容器
大佐不会说日语~1 天前
使用 Cloudflare平台 + Docker + Nginx 完成网站 HTTPS 部署实战记录
nginx·docker·https·部署·cloudflare
星环处相逢1 天前
K8s 实战笔记:3 种发布策略 + YAML 配置全攻略
java·docker·kubernetes
yumgpkpm1 天前
Cloudera CDH5、CDH6、CDP7现状及替代方案
数据库·人工智能·hive·hadoop·elasticsearch·数据挖掘·kafka
schinber1 天前
docker compose如何管理docker服务
运维·docker·容器