可以在docker中配置kafka集群的yml文件
新人发帖,表述有问题部分请大家指出
双Broker的Kafka集群配置文件
网上关于kafka的教程好少,我想在linux服务器上配置kafka集群来学习springboot整合kafka。因此找到了这个教程:https://github.com/qiuChengleiy/springboot-kafka-all 在使用该教程中的yml文件创建容器时,遇见了很多奇奇怪怪的问题。最终总结了一个没有bug的yml文件如下,进行一个分享,默认熟悉docker-compose的使用:
食用指南:
- 将yml文件中的
{EXTERNAL}替换为自己服务器的ip地址 - 控制台输入
docker-compose up -d - 耐心等待镜像下载,待显示创建容器成功后,等待半分钟左右,就可以在浏览器访问
{你的服务器ip地址}:9999访问Kafka-ui界面了(记得给给云服务器的防火墙设置允许端口访问)
▼yml复制代码version: '3.1' services: zoo1: image: docker.m.daocloud.io/confluentinc/cp-zookeeper:7.3.2 hostname: zoo1 container_name: zoo1 ports: - "2181:2181" environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 # 限制Zookeeper内存使用 KAFKA_HEAP_OPTS: "-Xmx256M -Xms256M" volumes: - ./data/zookeeper/zoo1/data:/data - ./data/zookeeper/zoo1/datalog:/datalog kafka1: image: docker.m.daocloud.io/confluentinc/cp-kafka:7.3.2 hostname: kafka1 container_name: kafka1 ports: - "9092:9092" - "29092:29092" environment: KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka1:19092,EXTERNAL://{EXTERNAL}:9092,DOCKER://host.docker.internal:29092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT,DOCKER:PLAINTEXT KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL KAFKA_ZOOKEEPER_CONNECT: "zoo1:2181" KAFKA_BROKER_ID: 1 KAFKA_LOG4J_LOGGERS: "kafka.controller=INFO,kafka.producer.async.DefaultEventHandler=INFO,state.change.logger=INFO" KAFKA_AUTHORIZER_CLASS_NAME: kafka.security.authorizer.AclAuthorizer KAFKA_ALLOW_EVERYONE_IF_NO_ACL_FOUND: "true" # ✅ 允许自动创建 topic(关键配置) KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" # ✅ offsets topic 配置(关键配置) KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2 KAFKA_OFFSETS_TOPIC_NUM_PARTITIONS: 50 # 限制内存使用防止OOM KAFKA_HEAP_OPTS: "-Xmx400M -Xms400M" volumes: - ./data/kafka_data1:/kafka/data depends_on: - zoo1 kafka2: image: docker.m.daocloud.io/confluentinc/cp-kafka:7.3.2 hostname: kafka2 container_name: kafka2 ports: - "9093:9093" - "29093:29093" environment: KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka2:19093,EXTERNAL://{EXTERNAL}:9093,DOCKER://host.docker.internal:29093 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT,DOCKER:PLAINTEXT KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL KAFKA_ZOOKEEPER_CONNECT: "zoo1:2181" KAFKA_BROKER_ID: 2 KAFKA_LOG4J_LOGGERS: "kafka.controller=INFO,kafka.producer.async.DefaultEventHandler=INFO,state.change.logger=INFO" KAFKA_AUTHORIZER_CLASS_NAME: kafka.security.authorizer.AclAuthorizer KAFKA_ALLOW_EVERYONE_IF_NO_ACL_FOUND: "true" # ✅ 允许自动创建 topic(关键配置) KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" # ✅ offsets topic 配置(关键配置) KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2 KAFKA_OFFSETS_TOPIC_NUM_PARTITIONS: 50 # 限制内存使用防止OOM KAFKA_HEAP_OPTS: "-Xmx400M -Xms400M" volumes: - ./data/kafka_data2:/kafka/data depends_on: - zoo1 kafka-ui: container_name: kafka-ui image: docker.m.daocloud.io/provectuslabs/kafka-ui:latest ports: - 9999:8080 depends_on: - kafka1 - kafka2 environment: # 配置为单个集群 KAFKA_CLUSTERS_0_NAME: kafka_cluster KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka1:19092,kafka2:19093 # 限制kafka-ui内存 JAVA_OPTS: "-Xmx256M -Xms256M"
随后在springboot项目中引入以下依赖就可以按照上面的教程在springboot中使用kafka啦
▼xml复制代码<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <!-- <version>2.2.6.RELEASE</version>--> </dependency> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka-test</artifactId> <scope>test</scope> </dependency>
可能遇到的问题
1. 控制台刷屏问题
问题现象
启动时输出大量 Kafka 配置信息(100+ 行),刷屏严重。
根本原因
Kafka 客户端默认日志级别为 INFO,会打印所有配置参数。
解决方案
在application.yml中调整日志级别
▼yml复制代码logging: level: org.apache.kafka: WARN org.apache.kafka.clients.producer: WARN org.apache.kafka.clients.consumer: WARN
2.明明Producer存数据进去了,但Cosnumer消费不到
可能的原因以及解决方法
当你一个集群中存在多个Broker的时候,而你所创建的Topic又有多个partition,此时需要把所有的Broker的端口号都在阿里云实例出入站规则里,因为一个Topic的partition可能分散在不同的Broker中,而Kafka中的Follower又只负责从Leader复制数据到Replica中,此时你消费消息的时候就需要从另一台Broker中消费,所以为每一台Broker都配置出入站规则是必须的。根据yml中的端口,例如上面的yml文件中两个Broker的端口分别为9092与9093,那么就得在防火墙中都配置这两个端口。
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
内容推荐
Day 5✅ 今天做了:1. 复习昨日内容2. 零代码:应用模块-应用部署3. 零代码:应用模块-前端开发4. AI 速通第四章⏰ 明天计划:5. 复习今日内容6. 零代码:对话历史模块-后端开发7. 零代码:对话历史模块-前端开发8. 零代码:对话历史模块-对话记忆9. AI闯关答题小程序第9期-AI生成题目优化联网搜索10. AI速通第五章📚 今日感悟:11. 感觉今天没学啥,但是时间花的却
4
Day 30很久没有打卡了, 感觉还是打上比较好, 能够看到自己每天做了啥✅ 今天做了:搭ClaudeCode工作台, 现有的ECC, ruflo框架没用过, 更喜欢自己搭的/笑哭
2
Day 6✅ 今天做了:1. 复习昨日内容2. 零代码:对话历史模块-后端开发3. 零代码:对话历史模块-前端开发4. 零代码:对话历史模块-对话记忆5. AI速通第五章⏰ 明天计划:6. 复习今日内容7. 零代码:工程项目生成-方案设计8. 零代码:工程项目生成-生成功能9. 零代码:工程项目生成-构建部署10. 零代码:工程项目生成-前端和扩展11. AI速通第六章📚 今日感悟:12. 今天
5
day2:今天上课;修改强化学习项目的奖励函数,然后开始训练明天计划:复习期中考,做作业,根据项目运行结果继续优化
1
Day 7✅ 今天做了:1. 复习昨日内容2. 零代码:工程项目生成-方案设计3. 零代码:工程项目生成-生成功能4. 休息半天⏰ 明天计划:5. 复习今日内容6. 零代码:工程项目生成-构建部署7. 零代码:工程项目生成-前端和扩展8. 零代码:功能扩展-应用封面图9. 零代码:功能扩展-项目下载10. 零代码:功能扩展-智能路由11. AI速通第五章📚 今日感悟:12. 第一次学到在源码上加
1
