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.partitions
和 default.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是一个系统属性,表示用户当前的工作目录,大多数情况下,用户的当前工作目录就是java项目的根目录(src文件的同级路径) System.getProperty("user.dir") 结果:D:\code…...
什么是Java泛型?它有什么作用
Java泛型(Generics)是一种允许在定义类、接口和方法时使用类型参数的机制。泛型提供了一种机制,使得代码可以对多种类型的对象进行操作,而无需进行类型转换。 Java泛型的作用 类型安全:通过在编译时进行类型检查&…...
[机缘参悟-197] - 《道家-水木然人间清醒1》读书笔记 -21-看问题从现象到本质的层次
目录 1. 现象层: 2. 关联层: 3. 原因层: 4. 本质层: 5. 解决方案层: 6. 设计实现层: 7. 泛化: 8. 创新与发现: 看问题从现象到本质的层次是一个逐步深入、由表及里的过程。这…...

AIGC商业案例实操课,发觉其创造和商业的无限可能,Ai技术在行业应用新的商机
课程下载:https://download.csdn.net/download/m0_66047725/89307523 更多资源下载:关注我。 课程内容 1 AI为什么火 。写在课程前面的寄语 。AIGC标志性事件:太空歌剧院 。AI人工智能为什么这么火 ,AI人工智能发展历程 。聊天AI会取…...
Java学习路径图
1.学习路径 JAVA架构师学习路径 2.路径拆解 2.1 Spring 2.1.1 SpringBoot原理 SpringBoot2学习视频 SpringBoot2笔记 SpringBoo2代码 2.2.2 SpringBoot项目 《谷粒商城》学习视频...
文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑动态定价的新能源汽车能源站优化运行》
本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…...

【简单讲解下Fine-tuning BERT,什么是Fine-tuning BERT?】
🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...

Docker搭建Redis主从 + Redis哨兵模式(一主一从俩哨兵)
我这里是搭建一主一从,俩哨兵,准备两台服务器,分别安装docker 我这里有两台centos服务器 主服务器IP:192.168.252.134 从服务器IP:192.168.252.135 1.两台服务器分别拉取redis镜像 docker pull redis 2.查看镜像 d…...

Three.js——tween动画、光线投射拾取、加载.obj/.mtl外部文件、使用相机控制器
个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL) 🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展 …...

内网渗透-在HTTP协议层面绕过WAF
进入正题,随着安全意思增强,各企业对自己的网站也更加注重安全性。但很多web应用因为老旧,或贪图方便想以最小代价保证应用安全,就只仅仅给服务器安装waf。 本次从协议层面绕过waf实验用sql注入演示,但不限于实际应用…...
qt QGroupBox radiobutton
QGroupBox 显示文本:属性 title 加载radiobutton if (jsonObject.contains("startEndTogether") && jsonObject["startEndTogether"].isString()) {QString selectedButton jsonObject["startEndTogether"].toString();//…...
jetson nano onnxruntime 安装
安装说明: onnxruntime 依赖cuda、cudnn版本,可onnxruntime查找对应关系。但可能会出现jetpack中的cuda和cudnn的版本无法查找到对应版本的onnxruntime的问题。 解决方法: 通过Jetson Zoo下载相应的whl包直接安装。...

图形学初识--屏幕空间变换
文章目录 前言正文为什么需要屏幕空间变换?什么是屏幕空间变换?屏幕空间变换矩阵如何推导?问题描述步骤描述 结尾:喜欢的小伙伴点点关注赞哦! 前言 前面章节主要讲解了视图变换和投影变换,此时距离在屏幕空间显示也就…...
爬楼梯 - LeetCode 热题 81
大家好!我是曾续缘😇 今天是《LeetCode 热题 100》系列 发车第 81 天 动态规划第 1 题 ❤️点赞 👍 收藏 ⭐再看,养成习惯 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法…...
详解 Spark 核心编程之 RDD 分区器
一、RDD 分区器简介 Spark 分区器的父类是 Partitioner 抽象类分区器直接决定了 RDD 中分区的个数、RDD 中每条数据经过 Shuffle 后进入哪个分区,进而决定了 Reduce 的个数只有 Key-Value 类型的 RDD 才有分区器,非 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未来的发展影响更大?两个 Java 版本中的重要特性:Java 21 的虚拟线程和 Java 22 的 FFM API。我这里有一套编程入门教程,不仅包含了详细的视频讲解,项目实战。如果你渴望学习编程,不妨点个关注,给…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...