【docker-compose 跨节点部署 kafka-kraft SASL用户加密集群】全网最新!

news2024/11/17 1:36:06

一、概述

文本主要讲解使用Docker-compose在三个节点上部署Kafka3.5.1(现阶段最新版本)-kraft模式,加密使用了用户名密码加密的SASL_PLAINTEXT+PLAIN方式。SSL加密在我的docker-compose.yml文件基础上微调一下就好。所有的配置都通过环境变量注入,仅将加密文件进行了挂载,其他配置未挂载出容器。

二、硬件信息

前置需要做集群免密和时间同步操作。

节点名称操作系统开放端口
node1centos79092/9093
node2centos79092/9093
node3centos79092/9093

三、前置配置

  1. 生成JKS文件
    对于生成密钥,bitnami/kafka镜像官方介绍也给了kafka-generate-ssl.sh脚本用于生成JSK文件。这个脚本可以多次运行,第一次运行遇到提示“Do you need to generate a trust store and associated private key?”,选“y”,完成1和2环节;其他时候运行,选“n”,完成2环节。
    第一次运行成功后查看结果:
$ ls
truststore/    keystore/    kafka-generate-ssl.sh

$ ls truststore
ca-key    kafka.truststore.jks

$ ls keystore
kafka.keystore.jks
  1. 将JKS文件放到需要挂载进去的目录
    我三个节点用的JKS文件是同一个JKS加密文件。

四、docker-compose配置文件

  1. node1 配置文件
version: '3'
services:
  kafka-1:
    #环境变量的含义可以去dockerHub查看该镜像的介绍
    image: bitnami/kafka:3.5.1
    hostname: kafka-1
    ports:
      - "9092:9092"
      - "9093:9093"
    environment:
      - KAFKA_CFG_PROCESS_ROLES=broker,controller #声明角色
      - BITNAMI_DEBUG=true #控制台打印日志
      - ALLOW_PLAINTEXT_LISTENER=no #生产环境选择no
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
      - KAFKA_CFG_NUM_PARTITIONS=6 #默认分区数
      - KAFKA_CFG_LISTENERS=INTERNAL://:9094,CLIENT://:9095,CONTROLLER://:9093, EXTERNAL://:9092
      - KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://kafka-1:9094,CLIENT://:9095,EXTERNAL://node1:9092 #外部连入方式,暴露出去的端口需要指定宿主机,controller不用申明
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:SASL_PLAINTEXT,CLIENT:SASL_PLAINTEXT,CONTROLLER:PLAINTEXT,EXTERNAL:SASL_PLAINTEXT #指定加密方式,我内部传输是明文,按需修改
      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL
      - KAFKA_CFG_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM= #不验证域名
      - KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL=PLAIN
      - KAFKA_CFG_SASL_ENABLED_MECHANISMS=PLAIN
      - KAFKA_CERTIFICATE_PASSWORD=AZ2023 
      - KAFKA_TLS_TYPE=JKS
      - KAFKA_CLIENT_USERS=az
      - KAFKA_CLIENT_PASSWORDS=AZ2023
      - KAFKA_INTER_BROKER_USER=az
      - KAFKA_INTER_BROKER_PASSWORD=AZ2023
      - KAFKA_CFG_NODE_ID=0
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@node1:9093,1@node2:9093,2@node3:9093
      - KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv #集群唯一id
    volumes:
      - "/etc/hosts:/etc/hosts"
      - "./kafka/kafka.keystore.jks:/opt/bitnami/kafka/config/certs/kafka.keystore.jks:ro"
      - "./kafka/kafka.truststore.jks:/opt/bitnami/kafka/config/certs/kafka.truststore.jks:ro"
  1. node2配置
version: '3'
services:
  kafka-2:
    image: bitnami/kafka:3.5.1
    hostname: kafka-2
    ports:
      - "9092:9092"
      - "9093:9093"
    environment:
      - KAFKA_CFG_PROCESS_ROLES=broker,controller
      - BITNAMI_DEBUG=false
      - ALLOW_PLAINTEXT_LISTENER=no
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
      - KAFKA_CFG_LISTENERS=INTERNAL://:9094,CLIENT://:9095,CONTROLLER://:9093, EXTERNAL://:9092
      - KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://kafka-1:9094,CLIENT://:9095,EXTERNAL://node2:9092
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:SASL_PLAINTEXT,CLIENT:SASL_PLAINTEXT,CONTROLLER:PLAINTEXT,EXTERNAL:SASL_PLAINTEXT
      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL
      - KAFKA_CFG_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM=
      - KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL=PLAIN
      - KAFKA_CFG_SASL_ENABLED_MECHANISMS=PLAIN
      - KAFKA_CERTIFICATE_PASSWORD=AZ2023
      - KAFKA_TLS_TYPE=JKS
      - KAFKA_CLIENT_USERS=az
      - KAFKA_CLIENT_PASSWORDS=AZ2023
      - KAFKA_INTER_BROKER_USER=az
      - KAFKA_INTER_BROKER_PASSWORD=AZ2023
      - KAFKA_CFG_NODE_ID=1
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@node1:9093,1@node2:9093,2@node3:9093
      - KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv
    volumes:
      - "/etc/hosts:/etc/hosts"
      - "./kafka/kafka.keystore.jks:/opt/bitnami/kafka/config/certs/kafka.keystore.jks:ro"
      - "./kafka/kafka.truststore.jks:/opt/bitnami/kafka/config/certs/kafka.truststore.jks:ro"
  #这里开启了一个kafka-ui组件等之后验证下集群状态
  kafka-ui:
    container_name: kafka-ui
    image: provectuslabs/kafka-ui:master
    volumes:
      - /etc/hosts:/etc/hosts
    ports:
      - 9888:8080
    environment:
      DYNAMIC_CONFIG_ENABLED: true

  1. node3配置
version: '3'
services:
  kafka-3:
    image: bitnami/kafka:3.5.1
    hostname: kafka-3
    ports:
      - "9092:9092"
      - "9093:9093"
    environment:
      - KAFKA_CFG_PROCESS_ROLES=broker,controller
      - BITNAMI_DEBUG=false
      - ALLOW_PLAINTEXT_LISTENER=no
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
      - KAFKA_CFG_LISTENERS=INTERNAL://:9094,CLIENT://:9095,CONTROLLER://:9093, EXTERNAL://:9092
      - KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://kafka-1:9094,CLIENT://:9095,EXTERNAL://node3:9092
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:SASL_PLAINTEXT,CLIENT:SASL_PLAINTEXT,CONTROLLER:PLAINTEXT,EXTERNAL:SASL_PLAINTEXT
      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL
      - KAFKA_CFG_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM=
      - KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL=PLAIN
      - KAFKA_CFG_SASL_ENABLED_MECHANISMS=PLAIN
      - KAFKA_CERTIFICATE_PASSWORD=AZ2023
      - KAFKA_TLS_TYPE=JKS
      - KAFKA_CLIENT_USERS=az
      - KAFKA_CLIENT_PASSWORDS=AZ2023
      - KAFKA_INTER_BROKER_USER=az
      - KAFKA_INTER_BROKER_PASSWORD=AZ2023
      - KAFKA_CFG_NODE_ID=2
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@node1:9093,1@node2:9093,2@node3:9093
      - KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv
    volumes:
      - "/etc/hosts:/etc/hosts"
      - "./kafka/kafka.keystore.jks:/opt/bitnami/kafka/config/certs/kafka.keystore.jks:ro"
      - "./kafka/kafka.truststore.jks:/opt/bitnami/kafka/config/certs/kafka.truststore.jks:ro"

五、集群验证

  1. 通过kafka-ui的可视化页面验证

在这里插入图片描述
相关参考文章:
https://zhuanlan.zhihu.com/p/586005021
https://hub.docker.com/r/bitnami/kafka

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

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

相关文章

超详细springcloud sentinel教程~

基础 介绍 Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 基本概念 资源 资源是 Sent…

灰度变换原理//test later

灰度变换原理 图像灰度变换变换原理:通过变换函数T将原图像像素灰度值r映射为灰度值s: 2、灰度反转 2.1原理 灰度反转:将图像亮暗对调,可以增强图像中暗色区域细节 ��(�)�−1−…

无版权素材集合

一、无版权视频素材 1.pixabay 网址: https://pixabay.com/zh/videos/ 特点:没错,还是这个网站,除了图片,还有大量免费正版高清无水印视频素材,无需注册即可直接下载,支文搜索。你可以在任何地方使用 pixabay 的免费…

深度干货:制造进销存国内现状如何?2023年五大制造进销存最新盘点!

制造进销存是什么?制造进销存的发展如何?制造进销存的优势在哪里?制造进销存都能为企业提供什么?本文将带大家深入浅出的聊聊制造进销存,全面剖析制造进销存的前世今生,并且为大家提供2023年十大制造进销存…

WebGL 视图矩阵、模型视图矩阵

目录 立方体由三角形构成 视点和视线 视点、观察目标点和上方向 视点: 观察目标点: 上方向: 在WebGL中,观察者的默认状态应该是这样的: 视图矩阵程序(LookAtTriangles.js) 实际上&…

红巨星粒子插件 Red Giant Trapcode Suite for mac 2024

Red Giant Trapcode Suite是一款用于在After Effects中模拟和建模3D粒子和效果的软件,由Red Giant Software公司开发。 该软件包包含11种不同的工具,可以帮助用户模拟火、水、烟、雪等粒子效果,以及创建有机视觉效果和3D元素。它还支持在AE与…

机器学习(15)---代价函数、损失函数和目标函数详解

文章目录 一、各自定义二、各自详解三、代价函数和损失函数区别四、例题理解 一、各自定义 1. 代价函数:代价函数(Cost Function)是定义在整个训练集上的,是所有样本误差的平均,也就是损失函数的平均。它用于衡量模型在…

langchain主要模块(五):Agent以及Wandb

langchain2之Agent以及Wandb langchain1.概念2.主要模块模型输入/输出 (Model I/O)数据连接 (Data connection)链式组装 (Chains)代理 (Agents)内存 (Memory)回调 (Callbacks) 3.AgentAction Agent:Plan-and-Execute-Agent:搜索工具 4.wandb1.注册2.安装…

第七版教材下的PMP考试有多难?

难度没有上升多少的,毕竟新考纲已经考过几轮考试了,如果报了培训班,那是没多大难度,如果自学,也只是难在理解第七版教材,会比第六版难以理解很多,而且第六版的知识也仍然有用,只是相…

Python基础学习笔记1(AI Studio)

地址:飞桨AI Studio星河社区-人工智能学习与实训社区 课程地址:飞桨AI Studio星河社区-人工智能学习与实训社区 课程地址:飞桨AI Studio星河社区-人工智能学习与实训社区 课程地址:飞桨AI Studio星河社区-人工智能学习与实训…

FE_Vue学习笔记 - 数据代理

Vue中的数据代理是一种机制,通过它,Vue实例(vm)可以代理其数据对象(data)中的属性操作。这种代理的原理主要是通过Object.defineProperty()方法,将data对象的每个属性都添加到vm对象上&#xff…

2023年8月京东洗衣机行业品牌销售排行榜(京东数据挖掘)

鲸参谋监测的京东平台8月份洗衣机市场销售数据已出炉! 根据鲸参谋平台的数据显示,8月份,京东平台上洗衣机的销量共计117万,环比增长约5%,同比下降约8%;销售额为18亿,环比下降约2%,同…

使用SimpleDateFormat类的示例文档

以下是Java中使用SimpleDateFormat类的示例文档: 示例 import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date;public class Main {public static void main(String[] args) {String dateStr…

遥感数据与作物模型同化应用:PROSAIL模型、DSSAT模型、参数敏感性分析、数据同化算法、模型耦合、精度验证等主要环节

查看原文>>>遥感数据与作物模型同化实践技术应用 基于过程的作物生长模拟模型DSSAT是现代农业系统研究的有力工具,可以定量描述作物生长发育和产量形成过程及其与气候因子、土壤环境、品种类型和技术措施之间的关系,为不同条件下作物生长发育及…

【C++】哈希表的实现

哈希是什么理解哈希哈希所用的容器计算key值方法哈希的插入和查找解决哈希冲突闭散列也叫开放寻址法开散列 哈希闭散列实现闭散列结构闭散列结构插入闭散列查找闭散列删除 哈希开散列实现(链表式)开散列结构开散列结构插入开散列结构查找开散列结构删除 …

事件循环,还在微任务宏任务?过时了,快看看新版浏览器事件循环event loop(message loop)

浏览器的进程模型 进程:程序运⾏需要有它⾃⼰专属的内存空间,可以把这块内存空间简单的理解为进程。每个应⽤⾄少有⼀个进程,进程之间相互独⽴,即使要通信,也需要双⽅同意。 线程:有了进程,就…

【机器学习习题】估计一个模型在未见过的数据上的性能

您提到的不等式是统计学中的泛化误差界(generalization error bound),它用于估计一个模型在未见过的数据上的性能。这个不等式是由Hoeffding不等式和Union Bound组合而成的。在这个不等式中,我们有以下符号: - P[|E_i…

Linux安装JDK1.8并配置环境变量

Linux安装JDK并配置环境变量Linux安装JDK并配置环境变量Linux安装JDK并配置环境变量 一、查询已有JAVA环境版本信息 java -version 二、下载Oracle JDK安装包 https://www.oracle.com/java/technologies/downloads/archive/ 三、安装 配置JDK 以下方式适用于安装各版本JDK&…

第一届电子纸产业创新应用论坛

自从2004年索尼推出全球首款电子纸的应用产品——电纸书阅读器以来,20年间,在各个领域,涌现出众多优秀的电子纸的创新应用,如电子价签、手写本、手机、笔记本、显示器、电子公交站牌等,形成电子纸产业持续蓬勃发展的强…

Java“牵手”义乌购商品详情数据,义乌购商品详情接口,义乌购API接口申请指南

义乌购隶属浙江义乌购电子商务有限公司旗下网站。该平台定位为依托实体市场,服务实体市场,以诚信为根本,将7万网上商铺与实体商铺一一对应绑定,为采购商和经营户提供可控、可信、可溯源的交易保障。 义乌购平台现有商铺商品、市场…