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

Docker - Kafka

博文目录

文章目录

  • 说明
  • 命令


说明

Docker Hub - bitnami/kafka
Docker Hub - apache/kafka
Kafka QuickStart

Kafka 目前没有 Docker 官方镜像, 目前拉取次数最多的是 bitnami/kafka, Apache 提供的是 apache/kafka (更新最及时), 本文使用 bitnami/kafka

bitnami/kafka 镜像支持的环境变量有很多, 除 DockerHub 文档中列出的外, Kafka 的每一个配置项都可以与一个以 KAFKA_CFG_ 开头的环境变量相对应, 如 KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE 对应 auto.create.topics.enable, KAFKA_CFG_BACKGROUND_THREADS 对应 background.threads

Kafka 现在有两种启动方式, ZooKeeper 或 KRaft, 后者不需要依赖 Zookeeper, 本文使用 KRaft

Kafka KRaft Config

数据卷数据卷印射在容器内的路径
kafka/bitnami/kafka

命令

Kafka 文档

docker pull bitnami/kafka:3.7.0
docker volume create kafka
# 创建并运行容器
docker run -d --name kafka -p 9092:9092 --hostname=kafka -e TZ=Asia/Shanghai -e KAFKA_CFG_PROCESS_ROLES=controller,broker -e KAFKA_CFG_NODE_ID=0 -e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT -e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 -e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER -e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093 -e KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=false -v kafka:/bitnami/kafka bitnami/kafka:3.7.0
# KRaft 模式运行 Kafka 必须的配置
# 本节点扮演的角色, 即是 broker 也是 controller
process.roles=broker,controller
# 本节点的唯一标识
node.id=0
# 指定用于控制器通信的监听器名称, 作用是告诉 Kafka 控制器节点应该使用哪个监听器来进行通信。
# 控制器节点是 Kafka 集群中的一种特殊节点,负责管理集群的元数据、领导者选举、分区分配和其他集群管理任务。在 KRaft 模式下,控制器节点通过与其他节点之间的通信来执行这些任务。
controller.listener.names=CONTROLLER
# 该项配置了该节点接受连接的两个监听器, CONTROLLER 和 PLAINTEXT. 其中, CONTROLLER 监听器用于 controller 与 broker 的通信 (由 controller.listener.names 指定), PLAINTEXT 监听器用于 broker 与客户端的通信
# 定义 Socket 服务器监听的地址. 格式为 listeners = listener_name://host_name:port
# 这里没有写 host 部分, 作用是在所有网络接口上的 9092 和 9093 端口监听连接. 可以简单认为每一个网卡(对应一个 IP)就是一个网络接口, 比如主机有 localhost/局域网/公网 三个地址, 如果配置指定了 localhost, 则客户端不能通过局域网和公网地址连接到该节点
# 如果该节点同时扮演 broker 和 controller 角色, 则至少要列出 controller 监听器, 如果未列出 broker 监听器, 则默认监听器将使用主机名,主机名等于 java.net.InetAddress.getCanonicalHostName() 的值, 使用 PLAINTEXT 监听器名称, 并监听 9092 端口
# 如果某监听器的名称不是以安全协议名称来命名, 则需要配置 listener.security.protocol.map 来指定该监听器使用的安全协议, 这里 CONTROLLER 监听器使用的安全协议需要额外指定, 而 PLAINTEXT 监听器使用的安全协议就是它本身
listeners=CONTROLLER://:9093,PLAINTEXT://:9092
# 定义了 Broker 向客户端广告的地址和端口. 这些地址和端口是客户端用来连接到 Broker 的地址和端口
# 这通常用于处理 Broker 运行在 NAT 后面或容器化环境中的情况, Broker 监听的地址和端口与客户端需要使用的地址和端口不同
# 如果不加这个配置, kafka-client api 会报 UnknownHostException: kafka, 说明是把容器内主机的 hostname 返回去了
# 假设宿主机的 IP 地址是 192.168.1.100, 则该项配置为 advertised.listeners=PLAINTEXT://192.168.1.100:9092
advertised.listeners=PLAINTEXT://localhost:9092
# 指定监听器使用的安全协议, 常见的安全协议有 PLAINTEXT/SSL/SASL_PLAINTEXT/SASL_SSL 等
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
# 投票者列表, 奇数, 格式为 {id}@{host}:{port}, 这里的 host 为 kafka 是因为 docker run 通过 --hostname 指定了容器 host 为 kafka
controller.quorum.voters=0@kafka:9093
# 控制生产者与消费者尝试与不存在的主题交互时是否自动创建主题(使用默认分区与副本配置), 默认为 true
auto.create.topics.enable=false

可以在启动日志中找到 Kafka 节点的完整配置

# 查看日志
docker logs kafka
# 跟踪日志
docker logs -f kafka
docker logs --follow kafka
# 查看最后10条日志
docker logs --tail 10 kafka
# 查看最近10分钟的日志
docker logs --since 10m kafka
# 进入容器并执行 bash
docker exec -it kafka bash
# 退出容器
exit

Kafka 脚本文件在容器中的存放路径 /opt/bitnami/kafka/bin

默认情况下, 新建的 Topic 有一个分区, 每个分区有一个副本, 由 num.partitionsdefault.replication.factor 指定, 默认值都是 1

docker exec -it kafka bash
cd /opt/bitnami/kafka
# 创建 topic, 创建一个1分区1副本的主题, 集群每个节点都需要写到 --bootstrap-server 中, 用逗号分割
# host 用 kafka 是因为启动容器指定了 hostname
# 分区数会影响消费者的最大并行度
bin/kafka-topics.sh --bootstrap-server kafka:9092 --create --partitions 1 --replication-factor 1 --topic test
bin/kafka-topics.sh --bootstrap-server kafka:9092 --create --topic test
# 查看 topic
bin/kafka-topics.sh --bootstrap-server kafka:9092 --list
bin/kafka-topics.sh --bootstrap-server kafka:9092 --describe --topic test
# 修改 topic, 分区改为两个(分区数只能增不能减)
bin/kafka-topics.sh --bootstrap-server kafka:9092 -alter --partitions 2 --topic test
# 删除 topic
bin/kafka-topics.sh --bootstrap-server kafka:9092 --delete --topic test

相关文章:

Docker - Kafka

博文目录 文章目录 说明命令 说明 Docker Hub - bitnami/kafka Docker Hub - apache/kafka Kafka QuickStart Kafka 目前没有 Docker 官方镜像, 目前拉取次数最多的是 bitnami/kafka, Apache 提供的是 apache/kafka (更新最及时), 本文使用 bitnami/kafka bitnami/kafka 镜像…...

一键实现文件夹批量高效重命名:轻松运用随机一个字母命名,让文件管理焕然一新!

在数字化时代,文件夹管理是我们日常生活和工作中不可或缺的一部分。然而,随着文件数量的不断增加,文件夹命名的繁琐和重复成为了一个让人头疼的问题。你是否曾因为手动一个个重命名文件夹而感到枯燥乏味?你是否曾渴望有一种方法能…...

Vue3项目练习详细步骤(第二部分:主页面搭建)

主页面搭建 页面主体结构 路由 子路由 主页面搭建 页面主体结构 在vuews目录下新建Layout.vue文件 主页面内容主体代码 <script setup> import {Management,Promotion,UserFilled,User,Crop,EditPen,SwitchButton,CaretBottom } from element-plus/icons-vue imp…...

[个人总结]-java常用方法

1.获取项目根路径 user.dir是一个系统属性&#xff0c;表示用户当前的工作目录&#xff0c;大多数情况下&#xff0c;用户的当前工作目录就是java项目的根目录&#xff08;src文件的同级路径&#xff09; System.getProperty("user.dir") 结果&#xff1a;D:\code…...

什么是Java泛型?它有什么作用

Java泛型&#xff08;Generics&#xff09;是一种允许在定义类、接口和方法时使用类型参数的机制。泛型提供了一种机制&#xff0c;使得代码可以对多种类型的对象进行操作&#xff0c;而无需进行类型转换。 Java泛型的作用 类型安全&#xff1a;通过在编译时进行类型检查&…...

[机缘参悟-197] - 《道家-水木然人间清醒1》读书笔记 -21-看问题从现象到本质的层次

目录 1. 现象层&#xff1a; 2. 关联层&#xff1a; 3. 原因层&#xff1a; 4. 本质层&#xff1a; 5. 解决方案层&#xff1a; 6. 设计实现层&#xff1a; 7. 泛化&#xff1a; 8. 创新与发现&#xff1a; 看问题从现象到本质的层次是一个逐步深入、由表及里的过程。这…...

AIGC商业案例实操课,发觉其创造和商业的无限可能,Ai技术在行业应用新的商机

课程下载&#xff1a;https://download.csdn.net/download/m0_66047725/89307523 更多资源下载&#xff1a;关注我。 课程内容 1 AI为什么火 。写在课程前面的寄语 。AIGC标志性事件:太空歌剧院 。AI人工智能为什么这么火 &#xff0c;AI人工智能发展历程 。聊天AI会取…...

Java学习路径图

1.学习路径 JAVA架构师学习路径 2.路径拆解 2.1 Spring 2.1.1 SpringBoot原理 SpringBoot2学习视频 SpringBoot2笔记 SpringBoo2代码 2.2.2 SpringBoot项目 《谷粒商城》学习视频...

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑动态定价的新能源汽车能源站优化运行》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…...

【简单讲解下Fine-tuning BERT,什么是Fine-tuning BERT?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

Docker搭建Redis主从 + Redis哨兵模式(一主一从俩哨兵)

我这里是搭建一主一从&#xff0c;俩哨兵&#xff0c;准备两台服务器&#xff0c;分别安装docker 我这里有两台centos服务器 主服务器IP&#xff1a;192.168.252.134 从服务器IP&#xff1a;192.168.252.135 1.两台服务器分别拉取redis镜像 docker pull redis 2.查看镜像 d…...

Three.js——tween动画、光线投射拾取、加载.obj/.mtl外部文件、使用相机控制器

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 ⚡开源项目&#xff1a; rich-vue3 &#xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL&#xff09; &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1…...

内网渗透-在HTTP协议层面绕过WAF

进入正题&#xff0c;随着安全意思增强&#xff0c;各企业对自己的网站也更加注重安全性。但很多web应用因为老旧&#xff0c;或贪图方便想以最小代价保证应用安全&#xff0c;就只仅仅给服务器安装waf。 本次从协议层面绕过waf实验用sql注入演示&#xff0c;但不限于实际应用…...

qt QGroupBox radiobutton

QGroupBox 显示文本&#xff1a;属性 title 加载radiobutton if (jsonObject.contains("startEndTogether") && jsonObject["startEndTogether"].isString()) {QString selectedButton jsonObject["startEndTogether"].toString();//…...

jetson nano onnxruntime 安装

安装说明&#xff1a; onnxruntime 依赖cuda、cudnn版本&#xff0c;可onnxruntime查找对应关系。但可能会出现jetpack中的cuda和cudnn的版本无法查找到对应版本的onnxruntime的问题。 解决方法&#xff1a; 通过Jetson Zoo下载相应的whl包直接安装。...

图形学初识--屏幕空间变换

文章目录 前言正文为什么需要屏幕空间变换&#xff1f;什么是屏幕空间变换&#xff1f;屏幕空间变换矩阵如何推导&#xff1f;问题描述步骤描述 结尾&#xff1a;喜欢的小伙伴点点关注赞哦! 前言 前面章节主要讲解了视图变换和投影变换&#xff0c;此时距离在屏幕空间显示也就…...

爬楼梯 - LeetCode 热题 81

大家好&#xff01;我是曾续缘&#x1f607; 今天是《LeetCode 热题 100》系列 发车第 81 天 动态规划第 1 题 ❤️点赞 &#x1f44d; 收藏 ⭐再看&#xff0c;养成习惯 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法…...

详解 Spark 核心编程之 RDD 分区器

一、RDD 分区器简介 Spark 分区器的父类是 Partitioner 抽象类分区器直接决定了 RDD 中分区的个数、RDD 中每条数据经过 Shuffle 后进入哪个分区&#xff0c;进而决定了 Reduce 的个数只有 Key-Value 类型的 RDD 才有分区器&#xff0c;非 Key-Value 类型的 RDD 分区的值是 No…...

Selenium番外篇文本查找、元素高亮、截图、无头运行

Selenium根据文本查找元素 ​ python def find_element_with_text(self, loc, attribute, text):try:WebDriverWait(self.driver, 5).until(EC.all_of(EC.text_to_be_present_in_element_attribute(loc, attribute, text)))element self.driver.find_element(*loc)if isinsta…...

Java 22的FFM API,比起Java 21的虚拟线程

哪个对Java未来的发展影响更大&#xff1f;两个 Java 版本中的重要特性&#xff1a;Java 21 的虚拟线程和 Java 22 的 FFM API。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给…...

告别淘宝任务重复操作,让日常收益自动完成

告别淘宝任务重复操作&#xff0c;让日常收益自动完成 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本&#xff0c;包含蚂蚁森林收取能量&#xff0c;芭芭农场全任务&#xff0c;解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/taojinbi 你是否每天早上睁…...

树莓派Pico RP2040 I2C实战:用AT24C02 EEPROM做个数据掉电保存的小项目

树莓派Pico RP2040 I2C实战&#xff1a;用AT24C02 EEPROM实现数据持久化存储 在嵌入式开发中&#xff0c;数据持久化存储是一个常见需求。当我们需要保存设备配置、运行日志或用户设置时&#xff0c;EEPROM&#xff08;电可擦可编程只读存储器&#xff09;因其非易失性特性成为…...

保姆级教程:用SAP LSMW的Standard Batch/Direct Input搞定BOM批量导入(附FILE逻辑文件配置避坑指南)

SAP LSMW实战&#xff1a;BOM批量导入全流程解析与避坑指南 引言&#xff1a;为什么选择Standard Batch/Direct Input&#xff1f; 刚接触SAP PP模块的顾问们&#xff0c;第一次面对BOM批量导入任务时往往手足无措。Excel表格里整齐排列的物料清单&#xff0c;如何在SAP系统中…...

Agent 帮不了你,不是因为它不够聪明

上一篇我们分析了 CLI vs MCP 的争论本质上是在讨论"管道"&#xff0c;而真正缺的是"水龙头"。这篇继续往下挖&#xff1a;就算水龙头开了&#xff0c;你也大概率接不上。Agent 在现实中寸步难行的原因&#xff0c;比大多数人想的更结构化。 一个常见的许诺…...

python-flask-djangol框架的现代化动物园观光游览系统

目录技术选型与架构设计核心功能模块实现票务与游客管理智能化服务集成性能优化与测试部署与监控项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术选型与架构设计 采用Python的Flask或Django框架构建后端系统&#xff0c;具…...

一天一个开源项目(第56篇):人人都能用英语 - AI 时代的外语学习开源项目

引言 “其实一个字就够了&#xff1a;用。” 这是「一天一个开源项目」系列的第 56 篇文章。今天介绍的项目是 人人都能用英语&#xff08;GitHub&#xff09;。 学英语的核心是什么&#xff1f;李笑来在 2010 年的著作里用一个字概括&#xff1a;用。如今&#xff0c;这个经典…...

Phi-3-mini-128k-instruct与STM32开发:生成嵌入式C代码与调试逻辑

Phi-3-mini-128k-instruct与STM32开发&#xff1a;生成嵌入式C代码与调试逻辑 1. 引言 如果你玩过STM32&#xff0c;尤其是像STM32F103C8T6这种经典的“蓝色药丸”最小系统板&#xff0c;肯定对下面这些场景不陌生&#xff1a;为了点亮一个LED&#xff0c;翻遍数据手册&#…...

SJA1105Q升级踩坑记:RGMII V2.0时序下,33Ω串阻为何成了千兆通信的‘隐形杀手’?

SJA1105Q升级中的RGMII V2.0时序陷阱&#xff1a;33Ω串阻如何摧毁千兆通信稳定性 当NXP SJA1105Q这款号称"增强版"的工业交换机芯片落到我们硬件工程师手中时&#xff0c;谁曾想PCB上那些看似无害的33Ω小电阻&#xff0c;竟会成为千兆通信系统的阿喀琉斯之踵。这不…...

AgentCPM深度研报助手C语言文件操作实战:批量处理本地研报文本文件

AgentCPM深度研报助手C语言文件操作实战&#xff1a;批量处理本地研报文本文件 你是不是也遇到过这样的场景&#xff1f;手头有一堆下载好的行业研报&#xff0c;有PDF&#xff0c;有TXT&#xff0c;堆在文件夹里。想快速了解每份报告的核心观点&#xff0c;但一份份打开看&am…...

RTX4090D显存优化:OpenClaw长文本处理实测Qwen3-32B性能

RTX4090D显存优化&#xff1a;OpenClaw长文本处理实测Qwen3-32B性能 1. 测试背景与实验设计 去年我在处理学术论文时&#xff0c;经常遇到需要分析几十页PDF的情况。传统工具要么截断文本&#xff0c;要么丢失关键上下文。当我发现OpenClaw支持本地部署大模型后&#xff0c;立…...