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

docker 部署 Kafka 单机和集群

一、准备工作

  1. 安装 Docker
    确保本机已安装 Docker。可以通过以下命令检查 Docker 是否已安装:
    docker --version
    

如果未安装,可以访问 Docker 官网下载并安装 Docker Desktop(Windows 和 Mac)或使用包管理器安装(Linux)。

  1. 拉取 Kafka 镜像
    打开终端,执行以下命令拉取 Kafka 镜像:
    docker pull bitnami/kafka:latest
    
    此命令会从 Docker Hub 下载最新版本的 Kafka 镜像,由 Bitnami 提供,该镜像已预配置好 Kafka 的环境和依赖。

单机

Kafka 4.0 将移除zookeeper,仅支持KRaft
所以我们使用KRaft模式,这也是kafka的默认模式.

1.创建数据目录
在本机上创建一个目录用于存放 Kafka 的数据,例如 /data/kafka_data。可以使用以下命令创建:

mkdir -p /data/kafka_data

由于这是一个非 root 的容器,挂载的文件和目录必须具有 UID 1001 的适当权限

sudo chown -R 1001:1001 /data/kafka_data

2.docker-run启动 Kafka 容器
在终端中执行以下命令启动 Kafka 容器:

docker run -d --name kafka \-p 9092:9092 -p 9093:9093 \-e KAFKA_ENABLE_KRAFT=yes \-e KAFKA_CFG_PROCESS_ROLES=broker,controller \-e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \-e KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT \-e KAFKA_CFG_LISTENERS=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093 \-e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \-e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://:9092 \-e KAFKA_BROKER_ID=1 \-e KAFKA_CFG_NODE_ID=1 \-e KAFKA_KRAFT_CLUSTER_ID=your_unique_cluster_id \-e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@localhost:9093 \-e KAFKA_CFG_CONTROLLER_QUORUM_VOTER_CLIENT_QUOTA_WINDOW_NUM=10 \-e KAFKA_CFG_CONTROLLER_QUORUM_VOTER_CLIENT_QUOTA_WINDOW_SIZE_SECONDS=1 \-e KAFKA_CFG_CONTROLLER_QUORUM_VOTER_REQUEST_TIMEOUT_MS=5000 \-v /data/kafka_data:/kafka:rw \bitnami/kafka:latest

3.docker-compose部署 Kafka 容器
docker compose -f docker-compose.yml up -d

version: "3"services:kafka:image: bitnami/kafka:latestports:- "9092:9092"volumes:- "/data/kafka_data:/bitnami"environment:# KRaft settings- KAFKA_CFG_NODE_ID=0- KAFKA_CFG_PROCESS_ROLES=controller,broker- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@localhost:9093# Listeners- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://:9092- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT

参数解释

参数名称说明
KAFKA_ADVERTISED_HOST_NAME这是 Kafka 服务器的主机名或 IP地址,用于通知生产者和消费者连接到该地址。
KAFKA_ENABLE_KRAFT这个参数启用 Kafka Raft(KRaft)模式,它是 Kafka 2.8.0版本引入的一种新的高可用性模式。
KAFKA_KRAFT_CLUSTER_ID这是 KRaft 集群的唯一标识符,用于将 Kafka 服务器加入特定的 KRaft集群。
KAFKA_CFG_PROCESS_ROLES这个参数指定 Kafka 服务器的角色,其中 “broker” 表示服务器是一个普通的Kafka 节点,“controller” 表示服务器是集群的控制器。
KAFKA_BROKER_ID这是 Kafka 服务器的唯一标识符,用于在集群中区分不同的服务器。
KAFKA_CFG_NUM_PARTITIONS这个参数指定每个主题的默认分区数。分区是 Kafka中的消息存储单元,用于实现消息的并行处理。
KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR这个参数指定偏移量主题的副本因子,偏移量主题用于存储消费者的偏移量信息。
KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP这个参数定义了不同监听器的安全协议映射关系。在这个例子中,“EXTERNAL” 和 "CONTROLLER"分别映射到 “PLAINTEXT” 协议,表示这些监听器使用明文传输。
KAFKA_CFG_LISTENERS这个参数指定每个主题的默认分区数。分区是 Kafka中的消息存储单元,用于实现消息的并行处理。
KAFKA_CFG_ADVERTISED_LISTENERS这个参数定义了 Kafka监听器的配置。在这个例子中,有两个监听器分别使用不同的协议和端口号。
KAFKA_CFG_INTER_BROKER_LISTENER_NAME这个参数指定了经纪人之间通信使用的监听器名称,其中 “CLIENT” 表示使用客户端监听器。
KAFKA_CFG_CONTROLLER_LISTENER_NAMES这个参数指定控制器监听器的名称,用于控制器与其他经纪人之间的通信。
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS这个参数指定了控制器选举过程中的投票者信息,包括其 ID和监听器的地址。
ALLOW_PLAINTEXT_LISTENER这个参数允许使用明文传输的监听器进行连接。
KAFKA_AUTO_CREATE_TOPICS_ENABLE这个参数启用自动创建主题的功能,当生产者发送消息到不存在的主题时,将自动创建该主题。
KAFKA_CFG_INITIAL_BROKER_REGISTRATION_TIMEOUT_MS这个参数指定初始经纪人注册的超时时间,以毫秒为单位。在集群启动期间,经纪人必须在指定的时间内完成注册。

集群

在这里插入图片描述

生产环境中,机器足够,也需要一定的性能和稳定性。选择推荐使用完整集群方案
在3.0+版本中,基于raft协议的集群元数据管理方式,已经成熟,此处推荐使用kraft协议部署,简化部署方案
以前旧的依赖Zookeeper的方案在此不再提供、研究、维护

集群方式可参考链接

三台服务器,每个节点都承担broker,controller角色

# Copyright Broadcom, Inc. All Rights Reserved.
# SPDX-License-Identifier: APACHE-2.0services:kafka-0:image: docker.io/bitnami/kafka:3.9ports:- "9092"environment:# KRaft settings- KAFKA_CFG_NODE_ID=0- KAFKA_CFG_PROCESS_ROLES=controller,broker- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka-0:9093,1@kafka-1:9093,2@kafka-2:9093- KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv# Listeners- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://:9092- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT# Clustering- KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3- KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=3- KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=2volumes:- kafka_0_data:/bitnami/kafkakafka-1:image: docker.io/bitnami/kafka:3.9ports:- "9092"environment:# KRaft settings- KAFKA_CFG_NODE_ID=1- KAFKA_CFG_PROCESS_ROLES=controller,broker- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka-0:9093,1@kafka-1:9093,2@kafka-2:9093- KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv# Listeners- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://:9092- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT# Clustering- KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3- KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=3- KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=2volumes:- kafka_1_data:/bitnami/kafkakafka-2:image: docker.io/bitnami/kafka:3.9ports:- "9092"environment:# KRaft settings- KAFKA_CFG_NODE_ID=2- KAFKA_CFG_PROCESS_ROLES=controller,broker- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka-0:9093,1@kafka-1:9093,2@kafka-2:9093- KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv# Listeners- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://:9092- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT# Clustering- KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3- KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=3- KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=2volumes:- kafka_2_data:/bitnami/kafkavolumes:kafka_0_data:driver: localkafka_1_data:driver: localkafka_2_data:driver: local

相关文章:

docker 部署 Kafka 单机和集群

一、准备工作 安装 Docker 确保本机已安装 Docker。可以通过以下命令检查 Docker 是否已安装:docker --version如果未安装,可以访问 Docker 官网下载并安装 Docker Desktop(Windows 和 Mac)或使用包管理器安装(Linux&…...

PHP语言的软件开发工具

PHP语言的软件开发工具 在当今数字化的时代,软件开发已经成为一种常见的职业。无论是企业级应用、网站开发还是移动应用,开发者们都需要用到各种各样的工具。PHP作为一种广泛使用的服务器端脚本语言,因其简单、灵活与强大的功能,…...

前端【3】--CSS布局,CSS实现横向布局,盒子模型

盒子分类 1、块级盒子 2、内联级盒子 3、内联块级盒子 4、弹性盒子 5、盒子内部分区 方法一:使用 float 普通盒子实现横向布局 方法二:使用 display: inline-block 内联块级元素实现横向布局 方法三:使用弹性盒子 flexbox&#xff0…...

SQL语句IN和OR的区别

在SQL中,IN和OR都用于筛选条件,但它们的用途和性能上有一些区别。以下是两者的对比: 1. 语法 IN SELECT * FROM table_name WHERE column_name IN (value1, value2, value3);IN用于检查某列的值是否在一个给定的值列表中。 OR SELECT * FRO…...

OCP使用中的常见问题与解决方法

OCP的常见问题 页面卡顿: 遇到页面卡顿的问题时,首先需要区分是全局性的卡顿,即所有页面都出现延迟或响应缓慢,还是仅限于特定的监控页面。 监控数据看不到: 需要明确是全部数据都无法查看,还是仅限于特定集群的数…...

Git 版本控制:.gitignore 文件完全指南

.gitignore 文件是 Git 版本控制系统中的一个重要配置文件,用于告诉 Git 哪些文件和目录应该被忽略,不需要纳入版本控制。以下是关于 .gitignore 的完整笔记。 基本概念 .gitignore 文件可以放在项目的任何目录下,其作用范围包括所在目录及…...

STM32 FreeRTOS 介绍

目录 什么是裸机开发 什么是操作系统 通用操作系统 实时操作系统 FreeRTOS简介 FreeRTOS发展历史 FreeRTOS优势 FreeRTOS特点 什么是裸机开发 裸机开发指的是在没有操作系统(OS)或者其他高级软件支持的情况下,直接在裸机硬件上进行软…...

在 Azure 100 学生订阅中新建 Ubuntu VPS 并部署 Mastodon 服务器

今天想和大家分享一下如何在 Azure 的 100 学生订阅中,创建一台 Ubuntu VPS,并通过 Docker 部署 Mastodon 服务器。Mastodon 是一个开源的社交网络平台,允许用户创建自己的实例,类似于 Twitter,但更加去中心化。Docker…...

【Linux网络编程】序列化与反序列化

目录 一,序列化和反序列化的说明 二,Jsoncpp库的介绍 三,Jsoncpp库的使用 3-1,Json::Value类 3-2,Json::StreamWriter类 3-3,Json::CharReader类 一,序列化和反序列化的说明 序列化与反…...

Spring Boot中的自动配置原理是什么

Spring Boot 自动配置原理 Spring Boot 的自动配置机制基于 条件化配置,通过 EnableAutoConfiguration 注解来启用。自动配置的核心原理是 基于类路径和环境条件来推断所需要的配置,Spring Boot 会根据项目中引入的依赖和当前环境来自动装配相关的配置项…...

大模型相关资料、基础技术和排行榜

大模型排行榜 测试集CEval中文多个学科测试集排名MMLU大规模多任务语言理解英文排名,介绍斯坦福排行榜Math-VMath-VistaOpen LLMs LeaderboardCMMLU 大模型数据集 标题简介19个大模型常用的评估数据集和训练数据集汇总19个大模型常用的评估数据集和训练数据集汇总最…...

如何安装cnpm

今天尝试用npm install安装一个项目的依赖,但是无论如何都不能完成,等待时间非常久,所以同事推荐了cnpm,确实非常好用,所以推荐了出来,希望能给大家带来帮助。 cnpm 是中国淘宝团队提供的一个 npm 镜像工具…...

正则表达式 匹配特定字符后的所有字符

在处理文本数据时,正则表达式(RegularExpressions,简称Regex)是一种非常强大的工具,它可以用来搜索、匹配和替换文本中符合特定模式的字符串。 首先,明确我们的目标是匹配完整的URL,并获取它之…...

计算机网络 (44)电子邮件

一、概述 电子邮件(Electronic Mail,简称E-mail)是因特网上最早流行的应用之一,并且至今仍然是因特网上最重要、最实用的应用之一。它利用计算机技术和互联网,实现了信息的快速、便捷传递。与传统的邮政系统相比&#…...

数据结构与算法:动态规划dp:理论基础和相关力扣题(509.斐波那契数列、70.爬楼梯)

1.0.理论基础 动态规划主要解决的问题种类有: 背包问题打家劫舍股票问题子序列问题 解决步骤: dp数组及其下标的意义递推公式dp数组初始化遍历顺序打印dp数组 2.0.相关力扣题 509.斐波那契数列 class Solution:def fib(self, n: int) -> int:i…...

某政务行业基于 SeaTunnel 探索数据集成平台的架构实践

分享嘉宾:某政务公司大数据技术经理 孟小鹏 编辑整理:白鲸开源 曾辉 导读:本篇文章将从数据集成的基础概念入手,解析数据割裂给企业带来的挑战,阐述数据集成的重要性,并对常见的集成场景与工具进行阐述&…...

word-break控制的几种容器换行行为详解

word-break 属性在控制换行行为时需要根据语言判断,对于中文 一个字符就是一个单词,字符换行不影响阅读理解,而对于英文来说,多个连续的字符才会是一个单词,例如中文的 早 英文为 morning。 morning7个字符才算一个单词…...

【0x0084】HCI_Set_Min_Encryption_Key_Size命令详解

目录 一、命令概述 二、命令格式及参数 2.1 HCI_Set_Min_Encryption_Key_Size命令格式 2.2. Min_Encryption_Key_Size 三、生成事件及参数 3.1. HCI_Command_Complete 事件 3.2. Status 四、命令的执行流程 4.1. 主机端准备阶段 4.2. 命令发送阶段 4.3. 控制器接收和…...

关于2025年智能化招聘管理系统平台发展趋势

2025年,招聘管理领域正站在变革的十字路口,全新的技术浪潮与不断变化的职场生态相互碰撞,促使招聘管理系统成为重塑企业人才战略的关键力量。智能化招聘管理系统平台在这一背景下迅速崛起,其发展趋势不仅影响企业的招聘效率与质量…...

Docker部署Spring Boot + Vue项目

目录 前提条件 概述 下载代码 打开代码 Docker创建网络 MySQL容器准备 MySQL数据库配置 启动MySQL容器 测试连接MySQL 初始化MySQL数据 Redis容器准备 修改Redis配置 启动redis容器 部署后端 后端代码打包 上传jar包到Linux 创建Dockerfile 构建镜像 运行后…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...

用递归算法解锁「子集」问题 —— LeetCode 78题解析

文章目录 一、题目介绍二、递归思路详解&#xff1a;从决策树开始理解三、解法一&#xff1a;二叉决策树 DFS四、解法二&#xff1a;组合式回溯写法&#xff08;推荐&#xff09;五、解法对比 递归算法是编程中一种非常强大且常见的思想&#xff0c;它能够优雅地解决很多复杂的…...

CMS内容管理系统的设计与实现:多站点模式的实现

在一套内容管理系统中&#xff0c;其实有很多站点&#xff0c;比如企业门户网站&#xff0c;产品手册&#xff0c;知识帮助手册等&#xff0c;因此会需要多个站点&#xff0c;甚至PC、mobile、ipad各有一个站点。 每个站点关联的有站点所在目录及所属的域名。 一、站点表设计…...