Docker 快速搭建 Kafka 集群

Docker 快速搭建 Kafka 集群

你是否想要一个 Kafka 集群,但又不想经历繁琐的手动配置过程?别担心,有了 Docker 和 Docker Compose,我们可以轻松快捷地搭建一个 Kafka 集群,让你能专注于享受实时数据流处理的乐趣。

环境与工具

软件环境:

  • Docker:v20.10.21
  • Docker Compose:v2.15.1

硬件要求:

  • 内存:至少 4GB
  • CPU:至少双核

前置信息:

  • 使用 Bitnami 提供的 Kafka 和 ZooKeeper Docker 镜像。
  • 通过 Docker Compose 搭建多节点 Kafka 集群,包括一个 ZooKeeper 和三个 Kafka Broker。

步骤一览

  1. 安装 Docker 和 Docker Compose
  2. 准备 Docker Compose 文件
  3. 配置 Kafka 和 ZooKeeper 环境
  4. 启动集群
  5. 测试 Kafka 集群

详细步骤

1. 安装 Docker 和 Docker Compose

如果你还没有安装 Docker 和 Docker Compose,先别慌,这里有详细的安装步骤。

Docker 安装步骤:

  1. 卸载旧版本 Docker(如果有):
sudo apt-get remove docker docker-engine docker.io containerd runc
  1. 更新软件包列表并安装所需依赖:
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
  1. 添加 Docker 官方 GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  1. 设置 Docker 仓库:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. 安装 Docker:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. 检查 Docker 安装是否成功:
docker --version

Docker Compose 安装步骤:

  1. 下载 Docker Compose 二进制文件:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. 为二进制文件添加执行权限:
sudo chmod +x /usr/local/bin/docker-compose
  1. 检查 Docker Compose 安装是否成功:
docker-compose --version

2. 准备 Docker Compose 文件

接下来,让我们为 Kafka 集群编写 Docker Compose 配置文件。创建一个 docker-compose.yml 文件,并将以下内容填入其中:

# docker-compose.ymlversion: '3.8'services:zookeeper:image: bitnami/zookeeper:latestenvironment:- ZOO_ENABLE_AUTH=no- ALLOW_ANONYMOUS_LOGIN=yesports:- "2181:2181"kafka1:image: bitnami/kafka:latestenvironment:- KAFKA_BROKER_ID=1- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181- ALLOW_PLAINTEXT_LISTENER=yesports:- "9092:9092"depends_on:- zookeeperkafka2:image: bitnami/kafka:latestenvironment:- KAFKA_BROKER_ID=2- KAFKA_CFG_LISTENERS=PLAINTEXT://:9093- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181- ALLOW_PLAINTEXT_LISTENER=yesports:- "9093:9093"depends_on:- zookeeperkafka3:image: bitnami/kafka:latestenvironment:- KAFKA_BROKER_ID=3- KAFKA_CFG_LISTENERS=PLAINTEXT://:9094- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181- ALLOW_PLAINTEXT_LISTENER=yesports:- "9094:9094"depends_on:- zookeeper

3. 配置 Kafka 和 ZooKeeper 环境

docker-compose.yml 文件中,我们为每个服务设定了必要的环境变量:

  • ZooKeeper: 使用 bitnami/zookeeper 镜像,并在 2181 端口上提供服务。
  • Kafka Broker: 每个 Kafka Broker 使用 bitnami/kafka 镜像,监听不同的端口:
    • kafka1 监听 9092
    • kafka2 监听 9093
    • kafka3 监听 9094

小提醒:

  1. 请确保 ALLOW_PLAINTEXT_LISTENER 参数设置为 yes,以便允许明文传输。
  2. 如果你是为了生产环境,请务必启用加密连接和身份验证。

4. 启动集群

现在是时候让 Kafka 集群运转起来了。在 docker-compose.yml 文件所在目录执行以下命令:

docker-compose up -d

检查 Kafka 集群状态:

docker-compose ps

你应该会看到类似这样的输出:

    Name                  Command               State           Ports
------------------------------------------------------------------------
kafka-cluster_kafka1_1   /opt/bitnami/script ...   Up      0.0.0.0:9092->9092/tcp
kafka-cluster_kafka2_1   /opt/bitnami/script ...   Up      0.0.0.0:9093->9093/tcp
kafka-cluster_kafka3_1   /opt/bitnami/script ...   Up      0.0.0.0:9094->9094/tcp
kafka-cluster_zookeeper_1 /opt/bitnami/script ...   Up      0.0.0.0:2181->2181/tcp

5. 测试 Kafka 集群

让我们看看这个集群是否真的能工作吧!

1. 创建一个主题:

通过 kafka1 容器创建一个名为 test-topic 的主题:

docker exec -it kafka-cluster_kafka1_1 kafka-topics.sh --create --topic test-topic --bootstrap-server kafka1:9092 --replication-factor 3 --partitions 1

2. 列出主题:

检查主题是否创建成功:

docker exec -it kafka-cluster_kafka1_1 kafka-topics.sh --list --bootstrap-server kafka1:9092

你应该会看到:

test-topic

3. 发送测试消息:

通过 kafka1 容器向 test-topic 发送一些消息:

docker exec -it kafka-cluster_kafka1_1 kafka-console-producer.sh --topic test-topic --bootstrap-server kafka1:9092

输入以下内容作为测试消息:

Hello Kafka
This is a test message

使用 Ctrl+C 退出。

4. 消费测试消息:

在另一个终端窗口,通过 kafka1 容器消费 test-topic 中的消息:

docker exec -it kafka-cluster_kafka1_1 kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server kafka1:9092

你应该会看到:

Hello Kafka
This is a test message

注意事项与提示

  1. 端口冲突: 确保 9092, 90939094 端口没有被其他服务占用。
  2. ZooKeeper 检查: 可以通过 localhost:2181 确保 ZooKeeper 正常运行。
  3. Kafka 检查: 确保每个 Kafka Broker 正常运行并监听正确的端口。

好了,现在你有了自己的 Kafka 集群,尽情玩耍吧!有什么疑问或者建议,欢迎留言。

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

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

相关文章

Mongodb操作与Java(三)增删改语句及DDL新增或删除字段

MongoDB概念 MongoDB 基本概念指的是学习 MongoDB 最先应该了解的词汇,比如 MongoDB 中的"数据库"、"集合"、"文档"这三个名词: 文档(Document): 文档是 MongoDB 中最基本的数据单元&…

DeepSeek发布全新开源大模型,GPT-4级别能力 价格仅百分之一

最新国产开源MoE大模型,刚刚亮相就火了。 DeepSeek-V2性能达GPT-4级别,但开源、可免费商用、API价格仅为GPT-4-Turbo的百分之一。 因此一经发布,立马引发不小讨论。 从公布的性能指标来看,DeepSeek-V2的中文综合能力超越一众开源…

运维实施工程师之Linux服务器全套教程

一、Linux目录结构 1.1 基本介绍 Linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录。 在 Linux 世界里,一切皆文件(即使是一个硬件设备,也是使用文本来标…

校园论坛系统基于PHP的校园管理系统毕设校园好感度系统 校园文化建设系统APP小程序H5前后端源码交付支持二开,一次付款,终生使用

APP小程序H5前后端源码交付,支持二开,一次付款,终身使用,免费更新系统本身源码。 校园社交网络系统开发是一个复杂且综合性的项目,旨在为学生、教师和管理人员提供一个互动、分享和交流的平台。以下是一个关于校园社交…

Hive Bucketed Tables 分桶表

Hive Bucketed Tables 分桶表 1.分桶表概念 2.分桶规则 3.语法 4.分桶表的创建 5.分桶表的好处

工厂自动化升级改造(2)-RS485与Modbus通信协议

在工业控制、电力通信、智能仪表等领域,数据交换通常依赖于串口通信。最初,RS232接口是主流选择,然而,由于工业现场的复杂性,各种电气设备产生的电磁干扰可能导致信号传输错误。 RS232和RS485是两种不同的串行通信协议,它们在电气特性、传输距离和拓扑结构等方面有所不同…

linux 下使用Log4plus库

背景 CentOS 7.9 X86-64环境 下载地址 2、 安装与配置 安装 #tar –zxvf log4cplus-1.0.4.2.tar.gz #cd log4cplus-1.0.4.2 #configure --prefix/usr/local/ #make #make install //目的将文件放到/usr/local/lib/和/usr/local/include/log4cplus 这里已经安装成功,…

LINUX 入门 6

LINUX 入门 6 day10 20240505 耗时:41min day10 20240506 耗时:155min 课程链接地址 第6章 DNS协议与请求 1 DNS协议分析与项目介绍 自己去看教程 快速扫了一下,还是结合实践去看概念有感觉 回答以下几个问题: dns作用dns分层…

信息安全-古典密码学简介

目录 C. D. Shannon: 一、置换密码 二、单表代替密码 ① 加法密码 ② 乘法密码 ③密钥词组代替密码 三、多表代替密码 代数密码 四、古典密码的穷举分析 1、单表代替密码分析 五、古典密码的统计分析 1、密钥词组单表代替密码的统计分析 2、英语的统计规…

【PyTorch与深度学习】5、深入剖析PyTorch DataLoader源码

课程地址 最近做实验发现自己还是基础框架上掌握得不好,于是开始重学一遍PyTorch框架,这个是课程笔记,此节课很详细,笔记记的比较粗 1. DataLoader 1.1 DataLoader类实现 1.1.1 构造函数__init__实现 构造函数有如下参数&…

vue3第二十六节(Hooks 封装注意事项)

1、什么是 Hooks Hooks 最先提出的是React,在 React 16 之后提出了所有以use 开头定义的函数,用于复杂功能编写、函数组件中状态管理共用、副作用处理而抽离的共用的单一功能可复用的函数; 2、Hooks 与 mixins Class 在应用中的差异 在vue…

网络安全的未来:挑战、策略与创新

引言: 在数字化时代,网络安全已成为个人和企业不可忽视的议题。随着网络攻击的日益频繁和复杂化,如何有效保护数据和隐私成为了一个全球性的挑战。 一、网络安全的现状与挑战 网络安全面临的挑战多种多样,包括但不限于恶意软件、…

学习通下载PDF资源

今天突然发现,学习通的pdf资源居然是没有下载入口的,这整的我想cv一下我的作业都搞不了,于是我一怒之下,怒了一下。 可以看到学习通的pdf资源是内嵌在网页的,阅读起来很不方便,虽然他内置了阅读器&#xf…

Liunx查找过滤

目录 一.查找 基本用法 常见条件 搭配逻辑逻辑运算符(综合) 1.根据文件名 2.根据文件类型 3.根据文件大小 4.根据时间 5.根据权限 基本权限格式 找到后处理的动作与处理 1. -exec 2.xargs -exec和xargs的区别 扩展查找 1.which 应用…

SpringBoot中这样用ObjectMapper

每次new一个单例化个性化配置小结 你要说他有问题吧,确实能正常执行;可你要说没问题吧,在追求性能的同学眼里,这属实算是十恶不赦的代码了。 首先,让我们用JMH对这段代码做一个基准测试,让大家对其性能有个…

蓝桥杯 试题 算法训练 找数2

资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 找数2 【问题描述】在一个小到大的有序序列中(不存在重复数字),查找某个数所在的位置。如果该数不…

使用 Kubeadm 搭建个公网 k8s 集群(单控制平面集群)

前言 YY:国庆的时候趁着阿里云和腾讯云的轻量级服务器做促销一不小心剁了个手😎😢,2 Cores,4G RAM 还是阔以的,既然买了,那不能不用呀🚩,之前一直想着搭建个 k8s 集群玩…

【Git】Git学习-14:VSCode中使用git

学习视频链接:【GeekHour】一小时Git教程_哔哩哔哩_bilibili​编辑https://www.bilibili.com/video/BV1HM411377j/?vd_source95dda35ac10d1ae6785cc7006f365780 在vscode中打开文件 code . 自行修改内容,在源代码管理器中测试下

百度大模型文心一言api 请求错误码 一览表

错误码说明 千帆大模型平台API包含两类,分别为大模型能力API和大模型平台管控API,具体细分如下: 大模型能力API 对话Chat续写Completions向量Embeddings图像Images 大模型平台管控API 模型管理Prompt工程服务管理模型精调数据管理TPM&RP…

卷价格不如卷工艺降本增效狠抓模块规范化设计

俗话说,“卷价格不如卷工艺”,这意味着在追求成本控制和效率提升的过程中,蓝鹏的领导认为蓝鹏应该更注重工艺的优化和创新,而不仅仅是价格的竞争。而模块规范化设计正是实现这一目标的有效途径。 模块规范化设计可以提高生产效率…