当前位置: 首页 > news >正文

使用docker-compose安装kafka

使用docker-compose安装kafka和zookeeper

docker-compose.yml的配置

version: '3'services:zookeeper:image: 'zookeeper:3.8.0'container_name: zookeeperrestart: alwaysports:- "2181:2181"environment:TZ: Asia/ShanghaiALLOW_ANONYMOUS_LOGIN: "yes"kafka:image: 'bitnami/kafka:3.2.0'container_name: kafkarestart: alwaysports:- "9192:9192"  # 确保内外端口一致environment:KAFKA_BROKER_ID: 1KAFKA_CFG_LISTENERS: PLAINTEXT://0.0.0.0:9192  # 使用9192端口KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://192.168.1.10:9192  # 使用9192端口KAFKA_CFG_ZOOKEEPER_CONNECT: zookeeper:2181ALLOW_PLAINTEXT_LISTENER: "yes"TZ: Asia/Shanghaivolumes:- /work/var/kafka:/bitnami/kafkadepends_on:- zookeeper

关键点解释

  • KAFKA_CFG_LISTENERS:设置为 PLAINTEXT://0.0.0.0:9192,这意味着 Kafka 代理将监听所有网络接口上的 9192 端口。
  • KAFKA_CFG_ADVERTISED_LISTENERS:设置为 PLAINTEXT://192.168.1.10:9192,这意味着 Kafka 会告诉生产者和消费者使用 192.168.1.10 的 IP 地址以及 9192 端口来连接它。
  • Docker 端口映射:设置为 9192:9192,以确保容器内的 9192 端口映射到主机的 9192 端口,从而与 KAFKA_CFG_ADVERTISED_LISTENERS 中指定的端口保持一致。

确认网络连通性

确保从 192.168.1.7 可以访问 192.168.1.10:9192,你可以通过以下命令测试连通性:

telnet 192.168.1.111 9192
# 或者
nc -zv 192.168.1.111 9192

总结

通过上述配置,你可以确保 Kafka 代理监听正确的端口,并且向生产者和消费者广播一个它们可以访问的地址。这样不仅保持了配置的一致性,还减少了潜在的混淆和错误。此外,确保防火墙规则允许两台服务器之间的通信仍然是非常重要的。如果你按照这种方式配置后仍然遇到问题,请检查日志文件以获取更多线索,并确保没有其他网络或安全策略阻止了通信。

Zookeeper 的 docker-compose 配置可以优化,以满足以下需求:

  1. 挂载日志和数据目录

    • 挂载宿主机的目录到 Zookeeper 容器,便于持久化数据和查看日志。
    • Zookeeper 的数据目录默认是 /data,日志目录是 /datalog
  2. 配置日志文件大小限制

    • 使用 zookeeper-log4j.properties 文件配置日志滚动和大小限制。

以下是优化后的配置:


修改后的 docker-compose.yml

version: '3'services:zookeeper:image: 'zookeeper:3.8.0'container_name: zookeeperrestart: alwaysports:- "2181:2181"  # Zookeeper 默认端口environment:TZ: Asia/ShanghaiALLOW_ANONYMOUS_LOGIN: "yes"volumes:- /work/var/zookeeper/data:/data     # 数据目录- /work/var/zookeeper/datalog:/datalog # 日志目录- /work/var/zookeeper/logs:/logs     # 挂载日志目录- ./zookeeper-log4j.properties:/conf/log4j.properties # 自定义日志配置

添加日志配置文件

docker-compose.yml 的同级目录下,创建一个 zookeeper-log4j.properties 文件,用于配置 Zookeeper 的日志管理:

zookeeper-log4j.properties
zookeeper.root.logger=INFO, CONSOLE, ROLLINGFILE
zookeeper.console.threshold=INFO
log4j.rootLogger=${zookeeper.root.logger}# Console appender
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=${zookeeper.console.threshold}
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c{2} (%F:%L) - %m%n# Rolling File Appender
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLINGFILE.File=/logs/zookeeper.log
log4j.appender.ROLLINGFILE.MaxFileSize=10MB    # 每个日志文件最大大小
log4j.appender.ROLLINGFILE.MaxBackupIndex=5   # 保留的日志文件个数
log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c{2} (%F:%L) - %m%n

说明

  1. 挂载卷说明

    • /work/var/zookeeper/data:存储 Zookeeper 的快照数据。
    • /work/var/zookeeper/datalog:存储事务日志。
    • /work/var/zookeeper/logs:存储应用日志。
  2. 日志配置文件

    • zookeeper-log4j.properties 定义了日志输出到控制台和文件。
    • 滚动日志配置了最大文件大小为 10MB,最多保留 5 个旧日志文件。
  3. 查看日志

    • 使用 docker logs 查看控制台日志:
      docker logs zookeeper
      
    • 查看挂载的日志文件:
      tail -f /work/var/zookeeper/logs/zookeeper.log
      
  4. 限制日志大小

    • 每个日志文件最大 10MB,超过后生成新的日志文件。
    • 最多保留 5 个日志文件,避免日志占用过多磁盘空间。

启动服务

  1. 启动容器:

    docker-compose up -d
    
  2. 验证:

    • 检查 /work/var/zookeeper/logs/zookeeper.log 文件是否生成。
    • 检查 Zookeeper 是否正常运行:
      docker logs zookeeper
      

通过上述优化,你可以更方便地管理 Zookeeper 的日志和数据,同时避免日志占用过多磁盘空间。

你可以通过进入 Kafka 容器来使用 Kafka 自带的命令行工具 (kafka-console-producer.shkafka-console-consumer.sh) 测试消息的发送和消费。以下是步骤:


1. 进入 Kafka 容器

运行以下命令进入 Kafka 容器:

docker exec -it kafka /bin/bash

这将打开 Kafka 容器的交互式终端。


2. 测试生产消息

使用 kafka-console-producer.sh 向某个主题发送消息。

示例命令:
kafka-console-producer.sh --broker-list localhost:9092 --topic test-topic
操作:
  1. 输入消息,例如:
    Hello Kafka!
    Test message.
    
  2. 按回车键发送消息。

3. 测试消费消息

使用 kafka-console-consumer.sh 从主题中消费消息。

示例命令:
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic --from-beginning
操作:
  • --from-beginning 参数表示从主题的最早消息开始消费。
  • 你应该能看到在生产者中输入的消息,例如:
    Hello Kafka!
    Test message.
    

4. 创建主题(可选)

如果主题不存在,你可以手动创建一个主题。

创建主题命令:
kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
验证主题:

查看当前的主题列表:

kafka-topics.sh --list --bootstrap-server localhost:9092

5. 退出容器

完成测试后,可以输入以下命令退出容器:

exit

注意事项

  1. 连接配置:测试命令中的 --broker-list--bootstrap-server 参数必须匹配 Kafka 容器的配置。如果使用 docker-compose.yml 文件中的配置,应该是 localhost:9092 或容器内的默认端口。
  2. 远程测试:如果从其他服务器(如 192.168.1.7)测试,需要使用 KAFKA_CFG_ADVERTISED_LISTENERS 中配置的地址和端口(如 192.168.1.10:9192)。
  3. 错误排查:如果消息发送或消费失败,检查 Kafka 和 Zookeeper 的日志:
    docker logs kafka
    docker logs zookeeper
    

通过以上步骤,你可以快速测试 Kafka 的消息发送和消费功能。

相关文章:

  • FramePack 安装指南(中文)
  • Java八股文——数据结构「排序算法篇」
  • Power Apps - 尝试一下PowerApps中的Plan功能
  • 电子电气诊断架构 --- HPC车载诊断
  • 分布式系统中的 Kafka:流量削峰与异步解耦(二)
  • Ubuntu 22.04LTS下安装D435i深度相机的驱动
  • STM32:AS5600
  • XML在线格式化工具
  • 容器技术与Docker环境部署
  • 北京京东,看看难度
  • 机器学习模型:逻辑回归之计算概率
  • PostgreSQL 性能优化与集群部署:PGCE 认证培训实战指南
  • 10分钟撸出高性能网络服务:吃透高性能优化:缓存_锁_系统调用_编译
  • Spring Boot + MyBatis + Vue:从零到一构建全栈应用
  • 大模型在肺癌预测及个性化诊疗方案中的应用研究
  • Excel文件比较器v1.3,html和js写的
  • excel 数据透视表介绍
  • 从“数据困境”到“数据生态”:DaaS重塑三甲医院医疗数据治理
  • 【C++】哈希表的实现(开放定址法)
  • Elasticsearch相关操作
  • 门户网站 管理系统/跨境电商培训机构哪个靠谱
  • 建设产品网站/汕头网站建设方案外包
  • 学校网站建立/seoul是什么国家
  • 惠州哪个房地产网站做的比较好/谷歌商店官网
  • h5 app开发 网站建设/seo产品优化推广
  • 常州网站公司网站/百度推广怎么运营