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

使用docker 和 kubnernetes 部署单节点/多节点 kafka 环境

参考资料

  • https://kafka.apachecn.org/documentation.html#configuration

kafka的broker有三个核心配置

  • broker.id
  • log.dirs
  • zookeeper.connect

docker启动单节点kafka环境

启动zookeeper

可配置的环境变量,https://gallery.ecr.aws/bitnami/zookeeper

$ docker run -it --rm --name my-zookeeper -p 2181:2181 -e ALLOW_ANONYMOUS_LOGIN=yes zookeeper:3.7# 查看节点状态
$ /apache-zookeeper-3.7.0-bin/bin/zkServer.sh status

启动kafka

可配置的环境变量,https://gallery.ecr.aws/bitnami/kafka

$ docker run -it --rm --name my-kafka -p 9092:9092 --link my-zookeeper \-e KAFKA_BROKER_ID=0 \-e KAFKA_ZOOKEEPER_CONNECT=my-zookeeper:2181 \-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092 \-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \-e ALLOW_PLAINTEXT_LISTENER=yes public.ecr.aws/bitnami/kafka:3.2.3

查看和创建topic

$ kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --list
$ kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --topic test --create --partitions 1 --replication-factor 1

测试本地环境

$ kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic test --from-beginning$ kafka-console-producer.sh --broker-list 127.0.0.1:9092 --topic test

docker-compose启动单节点kafka

使用docker-composer部署

version: '3.8'
services:dk-zookeeper:image: zookeeper:3.7.0ports:- 2182:2181environment:- ALLOW_ANONYMOUS_LOGIN=yesdk-kafka-01:image: public.ecr.aws/bitnami/kafka:3.2.3ports:- 9092:9092environment:KAFKA_BROKER_ID: 0KAFKA_CFG_LISTENERS: PLAINTEXT://:9092KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://127.0.0.1:9092# KAFKA_CREATE_TOPICS: "test:1:0" //创建test的topic,具备1分区0副本KAFKA_ZOOKEEPER_CONNECT: dk-zookeeper:2181KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092ALLOW_PLAINTEXT_LISTENER: yesdepends_on:- dk-zookeeper

docker-compose启动多节点kafka集群

https://blog.csdn.net/qq_39526294/article/details/124293954

创建自定义网络

$ docker network create zookeeper_network

部署zookeeper

创建zookeeper服务

version: '3.8'networks:default:external:name: zookeeper_networkservices:zoo1:image: zookeeper:3.7.0hostname: zoo1ports:- 2181:2181environment:ZOO_MY_ID: 1ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181zoo2:image: zookeeper:3.7.0hostname: zoo2ports:- 2182:2181environment:ZOO_MY_ID: 2ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zoo3:2888:3888;2181zoo3:image: zookeeper:3.7.0hostname: zoo3ports:- 2183:2181environment:ZOO_MY_ID: 3ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181

启动zookeeper

$ docker-compose up

部署kafka

创建kafka服务

version: '3.8'networks:default:external:name: zookeeper_networkservices:kafka1:image: public.ecr.aws/bitnami/kafka:3.2.3restart: unless-stoppedcontainer_name: kafka1hostname: kafka1ports:- "9092:9092"external_links:- zoo1- zoo2- zoo3environment:KAFKA_BROKER_ID: 1KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://172.31.18.4:9092KAFKA_ADVERTISED_HOST_NAME: kafka1KAFKA_ADVERTISED_PORT: 9092KAFKA_ZOOKEEPER_CONNECT: "zoo1:2181,zoo2:2181,zoo3:2181"ALLOW_PLAINTEXT_LISTENER: yeskafka2:image: public.ecr.aws/bitnami/kafka:3.2.3restart: unless-stoppedcontainer_name: kafka2hostname: kafka2ports:- "9093:9092"external_links:- zoo1- zoo2- zoo3environment:KAFKA_BROKER_ID: 2KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.0.225:9093    ## 宿主机IPKAFKA_ADVERTISED_HOST_NAME: kafka2KAFKA_ADVERTISED_PORT: 9093KAFKA_ZOOKEEPER_CONNECT: "zoo1:2181,zoo2:2181,zoo3:2181"ALLOW_PLAINTEXT_LISTENER: yeskafka3:image: public.ecr.aws/bitnami/kafka:3.2.3restart: unless-stoppedcontainer_name: kafka3hostname: kafka3ports:- "9094:9092"external_links:- zoo1- zoo2- zoo3environment:KAFKA_BROKER_ID: 3KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.0.225:9094   ## 宿主机IPKAFKA_ADVERTISED_HOST_NAME: kafka3KAFKA_ADVERTISED_PORT: 9094KAFKA_ZOOKEEPER_CONNECT: "zoo1:2181,zoo2:2181,zoo3:2181"ALLOW_PLAINTEXT_LISTENER: yeskafka-manager:image: sheepkiller/kafka-manager:latestrestart: unless-stoppedcontainer_name: kafka-managerhostname: kafka-managerports:- "9000:9000"links:- kafka1- kafka2- kafka3external_links:- zoo1- zoo2- zoo3environment:ZK_HOSTS: zoo1:2181,zoo2:2181,zoo3:2181KAFKA_BROKERS: kafka1:9092,kafka2:9093,kafka3:9094

启动kafka

$ docker-compose up

查看kafka ui界面

image.png

kubernetes启动kafka集群

注意,这里目的仅仅是临时测试,因而回收策略设置为Delete

手动部署

单节点部署

apiVersion: v1
kind: Service
metadata:labels:app: zookeeper-servicename: zookeeper-service
spec:ports:- name: zookeeper-portport: 2181targetPort: 2181selector:app: zookeeper
---
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: zookeepername: zookeeper
spec:replicas: 1selector:matchLabels:app: zookeepertemplate:metadata:labels:app: zookeeperspec:containers:#- image: wurstmeister/zookeeper- image: xxxxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/zookeeper:3.7.0imagePullPolicy: IfNotPresentname: zookeeperports:- containerPort: 2181
---
apiVersion: v1
kind: Service
metadata:name: kafka-servicelabels:app: kafka
spec:type: NodePortports:- port: 9092name: kafka-porttargetPort: 9092protocol: TCPselector:app: kafka
---
kind: Deployment
apiVersion: apps/v1
metadata:name: kafka-deployment
spec:replicas: 1selector:matchLabels:app: kafkatemplate:metadata:labels:app: kafkaspec:containers:- name: kafkaimage: public.ecr.aws/bitnami/kafka:3.2.3imagePullPolicy: IfNotPresentports:- containerPort: 9092env:- name: KAFKA_ADVERTISED_PORTvalue: "9092"- name: KAFKA_ADVERTISED_HOST_NAMEvalue: "kafka-host"- name: KAFKA_ZOOKEEPER_CONNECTvalue: "zookeeper-service:2181"- name: KAFKA_BROKER_IDvalue: "1"- name: ALLOW_PLAINTEXT_LISTENERvalue: "yes"

多节点部署

https://blog.51cto.com/binghe001/5245687

相对来说比较复杂,网络上较多demo

使用operator部署

https://github.com/strimzi/strimzi-kafka-operator

https://github.com/strimzi/strimzi-kafka-operator/blob/0.34.0/examples/kafka/kafka-ephemeral.yaml

一键部署operator

kubectl create -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafka

创建单节点的zk-kafka环境

kubectl apply -f https://raw.githubusercontent.com/strimzi/strimzi-kafka-operator/0.34.0/examples/kafka/kafka-ephemeral-single.yaml -n kafka 

创建多节点临时存储kafka集群

kubectl apply -f https://raw.githubusercontent.com/strimzi/strimzi-kafka-operator/0.34.0/examples/kafka/kafka-ephemeral.yaml -n kafka 

yaml文件如下

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:name: my-cluster
spec:kafka:version: 3.4.0replicas: 3listeners:- name: plainport: 9092type: internaltls: false- name: tlsport: 9093type: internaltls: trueconfig:offsets.topic.replication.factor: 3transaction.state.log.replication.factor: 3transaction.state.log.min.isr: 2default.replication.factor: 3min.insync.replicas: 2inter.broker.protocol.version: "3.4"storage:type: ephemeralzookeeper:replicas: 3storage:type: ephemeralentityOperator:topicOperator: {}userOperator: {}

operator的方式还是方便的,删除环境只需要删除crd即可

$ k get pod -n kafka
NAME                                          READY   STATUS    RESTARTS   AGE
my-cluster-entity-operator-578d74f8f9-p9w5c   1/3     Running   0          16s
my-cluster-kafka-0                            1/1     Running   0          60s
my-cluster-kafka-1                            1/1     Running   0          60s
my-cluster-kafka-2                            1/1     Running   0          60s
my-cluster-zookeeper-0                        1/1     Running   0          114s
my-cluster-zookeeper-1                        1/1     Running   0          114s
my-cluster-zookeeper-2                        1/1     Running   0          114s
strimzi-cluster-operator-58967f75c7-8gp4w     1/1     Running   0          7m2s

测试集群

$ kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --list$ kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --topic test --create --partitions 1 --replication-factor 1$ kafka-topics --zookeeper zookeeper-service:2181  --list$ kafka-console-producer --topic test-topic --broker-list localhost:9092$ kafka-console-consumer --topic test-topic --from-beginning --bootstrap-server localhost:9092

相关文章:

使用docker 和 kubnernetes 部署单节点/多节点 kafka 环境

参考资料 https://kafka.apachecn.org/documentation.html#configuration kafka的broker有三个核心配置 broker.idlog.dirszookeeper.connect docker启动单节点kafka环境 启动zookeeper 可配置的环境变量,https://gallery.ecr.aws/bitnami/zookeeper $ docker …...

Linux使用:环境变量指南和CPU和GPU利用情况查看

Linux使用:环境变量指南和CPU和GPU利用情况查看Linux环境变量初始化与对应文件的生效顺序Linux的变量种类设置环境变量直接运行export命令定义变量修改系统环境变量修改用户环境变量修改环境变量配置文件环境配置文件的区别profile、 bashrc、.bash_profile、 .bash…...

深入浅出 SSL/CA 证书及其相关证书文件(pem、crt、cer、key、csr)

互联网是虚拟的,通过互联网我们无法正确获取对方真实身份。数字证书是网络世界中的身份证,数字证书为实现双方安全通信提供了电子认证。数字证书中含有密钥对所有者的识别信息,通过验证识别信息的真伪实现对证书持有者身份的认证。数字证书可…...

Compose(1/N) - 概念 基本使用

一、概念 1.1 解决的问题 APP展示的数据绝大多数不是静态数据而是会实时更新,传统的命令式UI写法更新界面繁琐且容易同步错误。1.2 Compose优势 由一个个可组合的Composable函数(可看作是一个Layout布局)拼成界面,方便维护和复用…...

2023高质量Java面试题集锦:高级Java工程师面试八股汇总

人人都想进大厂,当然我也不例外。早在春招的时候我就有向某某某大厂投岗了不少简历,可惜了,疫情期间都是远程面试,加上那时自身也有问题,导致屡投屡败。突然也意识到自己肚子里没啥货,问个啥都是卡卡卡卡&a…...

MySQL多表查询 子查询效率(DQL语句)

多表关系 项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种: 一对多(多…...

Linux中 ps命令详解

一、基础概念 指令: ps 作用:查看系统进程,比如正在运行的进程有哪些,什么时候开始运行的,哪个用户运行的,占用了多少资源。 参数: -e 显示所有进程-f 显示所有字段(UID&…...

【Python语言基础】——Python 关键字

Python语言基础——Python 关键字 文章目录Python语言基础——Python 关键字一、Python 关键字一、Python 关键字 Python 有一组关键字,这些关键字是保留字,不能用作变量名、函数名或任何其他标识符: 关键字 描述 and 逻辑运算符。 as 创建别…...

Java SE 基础(8)关键字和保留字

关键字 定义:被Java 语言赋予了特殊含义,用做专门用途的字符串(单词) 特点: 关键字中所有字母都为小写 用于定义数据类型的关键字 class、interface、 enum 、byte 、short、 int 、long、 float、 double、 char 、…...

Thinkphp 6.0响应输出和重定向

本节课我们来学习一下响应操作,响应输出和重定向。 一.响应操作 1. 响应输出,有好几种:包括 return、json()和 view()等等; 2. 默认输出方式是以 html 格式输出,如果你发起 json 请求,则输出 js…...

Centos html 中文 显示为乱码

0 : CentOS发布静态网页 之 httpd开启 https://blog.csdn.net/weixin_39689870/article/details/118146160 #yum install -y httpd #systemctl start httpd.service/etc/httpd/conf:该目录存放Apache服务器的配置文件 /var/www/html:该目录是…...

Helm学习笔记

文章目录概念定义helm组件helm的工作流程helm安装helm仓库helm部署应用helm应用的更新或回退或卸载概念 定义 学习helm首先得了解helm是什么,我们先来看一下helm的定义:helm是将kubernetes的各种资源对象打包,类似于Linux中的yum工具&#…...

深入学习JavaScript系列(二)——作用域和作用域链

本篇为第二篇,本系列文章会在后续学习后持续更新。 第一篇:#深入学习JavaScript系列(一)—— ES6中的JS执行上下文 第二篇:# 深入学习JavaScript系列(二)——作用域和作用域链 第三篇&#x…...

【计算机视觉 | 目标检测】DETR风格的目标检测框架解读

文章目录一、前言二、理解2.1 DETR的理解2.2 DETR的细致理解2.2.1 Backbone2.2.2 Transformer encoder2.2.3 Transformer decoder2.2.4 Prediction feed-forward networks (FFNs)2.2.5 Auxiliary decoding losses2.3 更具体的结构2.4 编码器的原理和作用2.5 解码器的原理和作用…...

【LeetCode】剑指 Offer 41. 数据流中的中位数 p214 -- Java Version

题目链接:https://leetcode.cn/problems/shu-ju-liu-zhong-de-zhong-wei-shu-lcof 1. 题目介绍(41. 数据流中的中位数) 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位…...

CSS3 知识总结

1,什么是CSS 用于定义网页的样式,包括不同设备和屏幕尺寸的设计、布局和显示变化。 2,CSS的作用优点 CSS 描述 HTML 元素如何在屏幕、纸张或其他媒体上显示 CSS 节省了大量工作。它可以一次控制多个网页的布局 3,css构成 CSS 规…...

回溯算法37:解数独

主要是我自己刷题的一些记录过程。如果有错可以指出哦,大家一起进步。 转载代码随想录 原文链接: 代码随想录 leetcode链接:37. 解数独 题目: 编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则…...

【蓝桥杯-筑基篇】动态规划

🍓系列专栏:蓝桥杯 🍉个人主页:个人主页 目录 1.最大连续子段和 2.LCS 最大公共子序列 3.LIS 最长上升子序列 4.数塔 5.最大子矩阵和 6.背包问题 ①01背包问题 ②完全背包 1.最大连续子段和 这段代码是一个求最大子数组和的算法,使用…...

Unity利用Photon PUN2框架快速实现多人在线游戏实例分享

简介 Photon 是一个泛用性的 ScoketServer 套装软件,可用于多人在线游戏、聊天室、大厅游戏,并同时支持 Windows、Unity3D、iOS、Android、Flash 等平台。Photon 包含两个部分,一部分是 Socket 服务器,另一部分是其针对各个平台编写的 SDK,Unity3D 平台对应的 SDK 为 Pho…...

ChatGPT直出1.5w字论文查重率才30% - 基于物联网技术的智能家居控制系统设计与实现

文章目录ChatGPT直出1.5w字论文查重率才30% - 基于物联网技术的智能家居控制系统设计与实现一、绪论1.1 研究背景与意义1.2 国内外研究现状分析1.3 研究内容与目标1.4 研究方向和思路二、物联网技术与智能家居概述2.1 物联网技术原理与应用2.2 智能家居的概念与发展历程2.3 智能…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

【JVM】- 内存结构

引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM&#xff09…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

【WebSocket】SpringBoot项目中使用WebSocket

1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖&#xff0c;添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...