Linux 上使用 Docker 部署 Kafka 集群

在 Linux 上使用 Docker 部署 Kafka 集群的步骤如下

1. 准备工作

确保已安装:
Docker
Docker Compose

2. 创建 Docker Compose 文件 (docker-compose.yml)

version: '3.8'services:zookeeper:image: wurstmeister/zookeepercontainer_name: zookeeperports:- "2181:2181"networks:- kafka-netvolumes:- ./zookeeper/data:/dataenvironment:ZOOKEEPER_CLIENT_PORT: 2181kafka1:image: wurstmeister/kafkacontainer_name: kafka1ports:- "9092:9092"environment:KAFKA_BROKER_ID: 1KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka1:9093,OUTSIDE://宿主机IP:9092KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXTKAFKA_LISTENERS: INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:9092KAFKA_INTER_BROKER_LISTENER_NAME: INSIDEKAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3volumes:- ./kafka1/data:/kafka- /var/run/docker.sock:/var/run/docker.socknetworks:- kafka-netdepends_on:- zookeeperkafka2:image: wurstmeister/kafkacontainer_name: kafka2ports:- "9093:9093"environment:KAFKA_BROKER_ID: 2KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka2:9094,OUTSIDE://宿主机IP:9093KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXTKAFKA_LISTENERS: INSIDE://0.0.0.0:9094,OUTSIDE://0.0.0.0:9093KAFKA_INTER_BROKER_LISTENER_NAME: INSIDEKAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3volumes:- ./kafka2/data:/kafka- /var/run/docker.sock:/var/run/docker.socknetworks:- kafka-netdepends_on:- zookeeperkafka3:image: wurstmeister/kafkacontainer_name: kafka3ports:- "9094:9094"environment:KAFKA_BROKER_ID: 3KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka3:9095,OUTSIDE://宿主机IP:9094KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXTKAFKA_LISTENERS: INSIDE://0.0.0.0:9095,OUTSIDE://0.0.0.0:9094KAFKA_INTER_BROKER_LISTENER_NAME: INSIDEKAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3volumes:- ./kafka3/data:/kafka- /var/run/docker.sock:/var/run/docker.socknetworks:- kafka-netdepends_on:- zookeepernetworks:kafka-net:driver: bridge

关键配置说明

  1. 网络架构
networks:kafka-net:driver: bridge

所有服务使用同一个自定义网络 kafka-net,确保容器间通过服务名称通信

  1. Zookeeper 配置
volumes:- ./zookeeper/data:/data  # 数据持久化路径
environment:ZOOKEEPER_CLIENT_PORT: 2181
  1. Kafka 节点配置
environment:# 监听器配置(核心)# 如果外部连接监听消费的话 # KAFKA_ADVERTISED_LISTENERS : INSIDE://kafka1:9093,OUTSIDE://localhost:9092需要修改为# KAFKA_ADVERTISED_LISTENERS : INSIDE://kafka1:9093,OUTSIDE://宿主机IP:9092KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka1:9093,OUTSIDE://宿主机IP:9092KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXTKAFKA_LISTENERS: INSIDE://0.0.0.0:9093,OUTSIDE://0.0.0.0:9092KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE# 其他重要参数KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"  # 禁止自动创建主题KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3  # 确保高可用
  1. 端口映射规则
节点节点宿主机端口宿主机端口
kafka190939092集群内部通信
kafka190929092外部客户端访问
kafka290949093集群内部通信
kafka290939093外部客户端访问
kafka390959094集群内部通信
kafka390949094外部客户端访问

操作流程

  1. 启动集群
mkdir -p {zookeeper,kafka1,kafka2,kafka3}/data
docker-compose up -d
  1. 验证集群状态
# 查看 Kafka 日志
docker logs kafka1# 进入容器检查 brokers
docker exec -it kafka1 bash
/opt/kafka/bin/kafka-broker-api-versions --bootstrap-server kafka1:9093
  1. 创建测试主题
docker exec -it kafka1 bash
/opt/kafka/bin/kafka-topics.sh --create \--topic test-topic \--partitions 3 \--replication-factor 3 \--bootstrap-server kafka1:9093
  1. 生产消费测试
# 生产者(使用外部端口)
docker exec -it kafka1 bash
/opt/kafka/bin/kafka-console-producer.sh \--topic test-topic \--bootstrap-server localhost:9092# 消费者(使用另一个节点)
docker exec -it kafka2 bash
/opt/kafka/bin/kafka-console-consumer.sh \--topic test-topic \--from-beginning \--bootstrap-server localhost:9093

常见问题排查

  1. Kafka 节点无法启动
    检查 KAFKA_ADVERTISED_LISTENERS 配置
    验证 Zookeeper 连接:
docker exec -it kafka1 bash
nc -zv zookeeper 2181
  1. 外部客户端无法连接
    检查宿主机防火墙设置
    确认使用外部监听器:
kafka-topics.sh --list --bootstrap-server localhost:9092
  1. 数据持久化失败
    确保挂载目录有写权限:
chmod -R a+rw ./kafka1/data ./kafka2/data ./kafka3/data

高级配置建议

  1. 调整 JVM 参数
    在环境变量中添加:
KAFKA_HEAP_OPTS: "-Xmx2G -Xms2G"
  1. 启用 SSL 加密
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:SSL,OUTSIDE:SSL
KAFKA_SSL_KEYSTORE_LOCATION: /kafka/keystore/kafka.jks
KAFKA_SSL_KEYSTORE_PASSWORD: yourpassword
  1. 集成监控
# 新增 Prometheus 服务
kafka-exporter:image: danielqsj/kafka-exporterports:- "9308:9308"environment:KAFKA_BROKERS: "kafka1:9093,kafka2:9094,kafka3:9095"networks:- kafka-net

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/73684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【性能优化点滴】odygrd/quill 中一个简单的标记位作用--降低 IO 次数

在 StreamSink 类中,成员变量 _write_occurred 的作用是 跟踪自上次刷新(Flush)以来是否有写入操作发生,其核心目的是 优化 I/O 性能。以下是详细解析: _write_occurred 的作用 1. 避免不必要的刷新(Flush…

Ubuntu Linux安装PyQt5并配置Qt Designer

一 安装 PyQt5 借助 apt 包管理器来安装 PyQt5 及其相关的开发工具: sudo apt install python3-pyqt5 pyqt5-dev-tools 假如报错, You might want to run apt --fix-broken install to correct these. 直接执行: sudo apt --fix-…

2025清华大学:DeepSeek教程全集(PDF+视频精讲,共10份).zip

一、资料列表 第一课:Deepseek基础入门 第二课:DeepSeek赋能职场 第三课:普通人如何抓住DeepSeek红利 第四课:让科研像聊天一样简单 第五课:DeepSeek与AI幻觉 第六课:基于DeepSeek的AI音乐词曲的创造法 第…

容器C++

string容器 string构造函数 #include<iostream> using namespace std; #include<string.h> void test01() {string s1;//默认构造const char* str "hello world";string s2(str);//传入char*cout << "s2" << s2 << endl;s…

【2.项目管理】2.4 Gannt图【甘特图】

甘特图&#xff08;Gantt&#xff09;深度解析与实践指南 &#x1f4ca; 一、甘特图基础模板 项目进度表示例 工作编号工作名称持续时间(月)项目进度&#xff08;周&#xff09;1需求分析3▓▓▓░░░░░░░2设计建模3░▓▓▓░░░░░░3编码开发3.5░░░▓▓▓▓░░…

C++List模拟实现|细节|难点|易错点|全面解析|类型转换|

目录 1.模拟代码全部 2.四大块代码理解 1.最底层&#xff1a;ListNode部分 2.第二层&#xff1a;ListIterator部分 3.第三层&#xff1a;ReserveListIterator部分 4最终层&#xff1a;List 1.模拟代码全部 using namespace std; template<class T> struct ListNode …

【深度学习与实战】2.1、线性回归模型与梯度下降法先导

import numpy as np# 数据准备 X np.array([1, 2, 3]) y np.array([3, 5, 7])# 参数初始化 w0, w1 0, 0 alpha 0.1 n len(X)# 迭代10次 for epoch in range(10):# 计算预测值y_pred w1 * X w0# 计算梯度grad_w0 (1/n) * np.sum(y_pred - y)grad_w1 (1/n) * np.sum((y_…

锐捷EWEB路由器 timeout.php任意文件上传漏洞代码审计(DVB-2025-9003)

免责声明 仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 一:产品介绍 锐捷EWEB路由器是锐…

flask开发中设置Flask SQLAlchemy 的 db.Column 只存储非负整数(即 0 或正整数)

如果你想控制一个 Flask SQLAlchemy 的 db.Column 只存储非负整数&#xff08;即 0 或正整数&#xff09;&#xff0c;你可以在模型中使用验证来确保这一点。一种常见的方法是使用模型的 validate 方法或者在执行插入或更新操作时进行检查。 以下是实现这一目标的几种方法&…

sqlmap 源码阅读与流程分析

0x01 前言 还是代码功底太差&#xff0c;所以想尝试阅读 sqlmap 源码一下&#xff0c;并且自己用 golang 重构&#xff0c;到后面会进行 ysoserial 的改写&#xff1b;以及 xray 的重构&#xff0c;当然那个应该会很多参考 cel-go 项目 0x02 环境准备 sqlmap 的项目地址&…

vscode连接服务器失败问题解决

文章目录 问题描述原因分析解决方法彻底删除VS Code重新安装较老的版本 问题描述 vscode链接服务器时提示了下面问题&#xff1a; 原因分析 这是说明VScode版本太高了。 https://code.visualstudio.com/docs/remote/faq#_can-i-run-vs-code-server-on-older-linux-distribu…

企业网站源码HTML成品网站与网页代码模板指南

在当今数字化时代&#xff0c;企业网站已成为展示品牌形象、吸引客户和提供在线服务的重要工具。对于许多企业来说&#xff0c;使用现成的HTML网站源码模板是快速搭建网站的高效方式。本文将详细介绍企业网站源码、HTML成品网站以及网页代码模板的相关内容&#xff0c;帮助你快…

计算机网络 - OSI 七层模型

OSI 七层模型 OSI&#xff08;Open System Interconnection&#xff0c;开放系统互联&#xff09;模型由 ISO&#xff08;国际标准化组织&#xff09; 制定&#xff0c;目的是为不同计算机网络系统之间的通信提供一个标准化的框架。它将网络通信划分为 七个层次&#xff0c;每…

flutter-实现瀑布流布局及下拉刷新上拉加载更多

文章目录 1. 效果预览2. 结构分析3. 完整代码4. 总结 1. 效果预览 在 Flutter 应用开发中&#xff0c;瀑布流布局常用于展示图片、商品列表等需要以不规则但整齐排列的内容。同时&#xff0c;下拉刷新和上拉加载更多功能&#xff0c;能够极大提升用户体验&#xff0c;让用户方…

在 Ubuntu 下通过 Docker 部署 Nginx 服务器

1. Docker 和 Nginx 简介以及实验环境 Docker 是一个开源的容器化平台&#xff0c;允许开发者将应用程序及其依赖项打包成一个轻量级的、可移植的容器。通过 Docker&#xff0c;开发者可以在任何支持 Docker 的环境中运行应用&#xff0c;从而实现一致的开发和生产环境。Docke…

IoT平台实时监测机器人状态的实现方案

通过IoT平台实时监测机器人状态的实现方案与可执行路径 一、整体架构设计 #mermaid-svg-6xMlDfFSZM4Wc8tA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-6xMlDfFSZM4Wc8tA .error-icon{fill:#552222;}#mermaid-sv…

mybatis里in关键字拼接id问题

我们一般会把ids集合用StrUtil.join(‘,’)转成"1,2,3"这种形式 然后放入in中 我们会这么写: select id, nick_name, icon from tb_user where id in (#{ids}) order by FIELD(id, #{ids})结果发现sql执行是这样的: select id, nick_name, icon from tb_user where…

4.用 Excel 录入数据

一 用 Excel 录入数据的两种方式 用鼠标键盘录入数据和从网上爬取数据。 二 用鼠标键盘录入数据 1.录入数据的规范 横着录入数据&#xff08;横着一条条录入数据&#xff09;。 2.使用快捷键进行数据录入 tab 键和 enter 键。 tab 键&#xff1a;向右移动一个单元格。 tab 键…

C++类与对象-3.23笔记

今天学习了类的概述和写类的基本框架 在哔哩哔哩学习的这个老师的C面向对象高级语言程序设计教程&#xff08;118集全&#xff09;讲的很不错&#xff08;真的&#xff01;&#xff01;&#xff01;&#xff09;&#xff0c;C语言也是在这个老师的带领下学习的 #include<io…

Android读写权限分析

Android系统使用的是Linux内核&#xff0c;所以Android系统沿用了linux系统的那一套文件读写权限。 目录 1&#xff0c;权限解读1.1&#xff0c;权限分为三种类型&#xff1a;1.2&#xff0c;权限针对的三类对象&#xff1a;1.3&#xff0c;文件和目录的权限区别1.3.1&#xf…