Kafka(一)使用Docker Compose安装单机Kafka以及Kafka UI

文章目录

  • Kafka中涉及到的术语
  • Kafka镜像选择
  • Kafka UI镜像选择
  • Docker Compose文件
    • Kafka配置项说明
      • KRaft vs Zookeeper
      • 和KRaft有关的配置
      • 关于Controller和Broker的概念解释
      • Listener的各种配置
    • Kafka UI配置项说明
  • 测试
  • Kafka集群Docker Compose示例配置

Kafka中涉及到的术语

对于Kafka中经常用到的术语,可参考confluent的官方文档,这里不再赘述。

Kafka镜像选择

镜像选择Docker Hub上使用最多的bitnami Kafka,主要注意的点是环境变量和Kafka配置的映射关系

Additionally, any environment variable beginning with KAFKA_CFG_ will be mapped to its corresponding Apache Kafka key. For example, use KAFKA_CFG_BACKGROUND_THREADS in order to set background.threads or KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE in order to configure auto.create.topics.enable

还有就是,当使用任何来自于bitnami的镜像,如何遇到了问题,想查看日志,可以将镜像的Debug日志打开,通过环境变量

BITNAMI_DEBUG=true

控制

由于Docker Hub的说明字数限制,可以在Github上查看完整文档

Kafka UI镜像选择

对于Kafka的UI工具,没有仔细调查,原因是在使用初期阶段,还不知道对于Kafka的监控和管理的痛点在哪,所以先用起来再说。

Kafka UI官方Github地址 > 文档网址 > Compose examples 下面可以找打很多Kafak ui的compose文件示例,不仅对UI的配置很有帮助,而且对刚入门Kafka的同学,也提供了非常好的示例,包括Kraft模式的Kafka集群等。

其他配置则阅读官方文档即可。

Docker Compose文件

version: "3"
services:kafka:image: 'bitnami/kafka:latest'container_name: kafkaports:- "9092:9092"- "9093:9093"volumes:- type: volumesource: kafka_standalone_datatarget: /bitnami/kafkaread_only: falseenvironment:- BITNAMI_DEBUG=yes# 启用KRaft模式必须设置下面三个属性- KAFKA_CFG_NODE_ID=1- KAFKA_CFG_PROCESS_ROLES=broker,controller- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER# broker id- KAFKA_BROKER_ID=1# listener的各种配置- KAFKA_CFG_LISTENERS=CONTROLLER://:9094,BROKER://:9092,EXTERNAL://:9093- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,BROKER:PLAINTEXT,EXTERNAL:PLAINTEXT# 注意EXTERNAL配置的是当前Docker所在的主机地址,BROKER可以使用Docker内部的网络地址即可- KAFKA_CFG_ADVERTISED_LISTENERS=BROKER://kafka:9092,EXTERNAL://192.168.0.101:9093# 内部各个broker之间通信用的listener- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=BROKER# 用来进行选举的Controller服务器,如果有多个Controller则都需要写上,这里本机- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@127.0.0.1:9094- ALLOW_PLAINTEXT_LISTENER=yeskafka-ui:container_name: kafka-uiimage: provectuslabs/kafka-ui:latestports:- "9095:8080"depends_on:- kafkaenvironment:KAFKA_CLUSTERS_0_NAME: kafka-stand-aloneKAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092KAFKA_CLUSTERS_0_METRICS_PORT: 9997SERVER_SERVLET_CONTEXT_PATH: /kafkauiAUTH_TYPE: "LOGIN_FORM"SPRING_SECURITY_USER_NAME: adminSPRING_SECURITY_USER_PASSWORD: kafkauipasswordDYNAMIC_CONFIG_ENABLED: 'true'
volumes:kafka_standalone_data:driver: local

Kafka配置项说明

KRaft vs Zookeeper

这里我们的配置是选择的是KRaft,因为Kafka官方已经计划在Kafak中移除Zookeeper。至于为什么要移除?confluentinc官方写了很多文章,这里不再一一列举,在Google上一搜就一大堆

KRaft site:confluent.io

下面是几篇文章

  • why move to kraft
  • Why ZooKeeper Was Replaced with KRaft
  • Apache Kafka Without ZooKeeper
  • Getting Started with the KRaft Protocol

和KRaft有关的配置

  • node.id

    The node ID associated with the roles this process is playing when process.roles is non-empty. This is required configuration when running in KRaft mode.

  • porcess.roles

    The roles that this process plays: ‘broker’, ‘controller’, or ‘broker,controller’ if it is both. This configuration is only applicable for clusters in KRaft (Kafka Raft) mode (instead of ZooKeeper). Leave this config undefined or empty for Zookeeper clusters

  • controller.listener.names

    A comma-separated list of the names of the listeners used by the controller. This is required if running in KRaft mode

关于Controller和Broker的概念解释

一句话解释:

Controller负责协调Broker(详细解释可见Kafak权威指南的第5章,该书可在Apache Kafak官网 > Get Started > Books 中找到免费下载)

To summarize, Kafka uses Zookeeper’s ephemeral node feature to elect a controller
and to notify the controller when nodes join and leave the cluster. The controller is
responsible for electing leaders among the partitions and replicas whenever it notices
nodes join and leave the cluster. The controller uses the epoch number to prevent a
“split brain” scenario where two nodes believe each is the current controller.

Broker负责处理生产者生产消息的请求、存储消息、消费者消费消息的请求。

A single Kafka server is called a broker. The broker receives messages from producers,
assigns offsets to them, and commits the messages to storage on disk. It also services
consumers, responding to fetch requests for partitions and responding with the mes‐
sages that have been committed to disk
来自Kafka权威指南第1章>Enter Kafka > Broker And Clusters

Listener的各种配置

当时看官方文档的时候,这部分一直被搞得晕头转向,直到看到这篇关于Kfaka的Listener文章,才彻底明白了各种listener,强烈推荐读一下这篇文章

listener可分为3种:

  1. 用来选举Controller的listener
  2. kafka集群内部各broker节点通信的listener
  3. 外部客户端,例如Java Client连接Kafka

了解了3中controller,结合上面的这篇文章+Apache Kafka官方文档的配置说明,配置listener就变得很容易了。

Kafka UI配置项说明

对于UI配置项没什么特别要说的,这里只是提一下,注意这里的docker-compose.yml中environment的写法,和上面的Kafka镜像中environment的写法不同,这是两种不同的写法
详细文档见Docker Compose文档规范中environment章节
在这里插入图片描述

测试

使用上述docker-compose.yml文件,启动

docker-compose -f docker-compose.yml up -d

在本地浏览器打开

http://localhost:9095/kafkaui/auth

输入用户名、密码,进入UI界面
在这里插入图片描述

Kafka集群Docker Compose示例配置

本篇文章重点在于搭建单机版Kfaka环境,集群不在文章讨论范围之内,如果对集群配置感兴趣和有需要的同学,这里仅给出几个示例的Github仓库仅供参考,并且全部使用KRaft而不是Zookeeper

我个人的理解,最小的集群应该是3个controller+3个broker, Kafka关于KRaft模式下Controller的部署建议

  1. 来自bitnami的Kafka集群示例,三个节点皆为controller和broker。
  2. 来自confluentic的Kafka集群配置,我个人倾向于这个配置,毕竟confluentic是Kafka商业化的公司,其创始人来自LinkedIn。这里是四个节点,一个controller和3个broker。
  3. 来自Github的Kafka-In-Box,使用4个节点。

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

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

相关文章

面试必考精华版Leetcode236. 二叉树的最近公共祖先

题目: 代码(首刷看解析 10.1): class Solution { public:TreeNode* ansnullptr;bool FindSon(TreeNode* root,TreeNode* p,TreeNode* q){if(root nullptr) return false;bool lson FindSon(root->left,p,q);bool rson FindSon(root-&…

LeetCode 146. LRU 缓存

原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 感谢博主题解点拨思路:LeetCode 0146. LRU 缓存:双向链表 哈希-CSDN博客 题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。…

基于SpringBoot的课程答疑系统

目录 前言 一、技术栈 二、系统功能介绍 学生信息管理 科目类型管理 老师回答管理 我的收藏管理 学生问题 留言反馈 交流区 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息互联网信息的飞速发展,无纸化作业变成了一种趋势&#x…

vSAN7.0更换硬盘步骤

更换容量盘 预先检查 查看故障硬盘 清单->集群->监控->vsan->skyline运行->物理磁盘->运维运行状况 检查数据同步状态 清单->集群->监控->vsan->重新同步对象,数值全为0表示未重建。 数据迁移检查 清单->集群->监控->…

Java实现word excel ppt模板渲染与导出及预览 LibreOffice jodconverter

Java Office 一、文档格式转换 文档格式转换是office操作中经常需要进行一个操作,例如将docx文档转换成pdf格式。 java在这方面有许多的操作方式,大致可以分为内部调用(无需要安装额外软件),外部调用(需…

数据结构--Trie字符串统计

1、“Trie树” 作用: 高效地存储和查找字符串集合的数据结构。 2、“Trie树” 存储字符串的形式如下: 用 “0” 来表示 “根节点(root)”。存入一个字符串时,会在字符串最后结尾的那个字符节点打上标记。比如&#x…

Python中计算并使用if判断BMI指数

1 问题 如何对BMI进行计算并且使用if判断BMI指数的范围。 2 方法 对身高和体重这两个变量进行赋值(体重单位:千克;身高单位:米。)。对BMI进行计算,体重除以身高的平方。通过if条件语句进行判断,…

力扣第2390题 从字符串中移除星号 c++ stack容器?超内存 用双指针 巧解

题目 力扣第2390. 从字符串中移除星号 中等 给你一个包含若干星号 * 的字符串 s 。 在一步操作中,你可以: 选中 s 中的一个星号。移除星号 左侧 最近的那个 非星号 字符,并移除该星号自身。 返回移除 所有 星号之后的字符串。 注意&am…

babel.config.js配置文件详解

文章目录 一、前言三、babel 详解四、拓展阅读 一、前言 项目开发阶段,使用可选链操作符 ?. 出现以下编译报错问题: 分析:由于可选链操作符 ?. 是ES2020(即ES11)中推出的新语法,允许我们不需要校验当前属…

FreeRTOS(以STM32F1系列为例子)

目录 任务管理任务函数任务控制块顶层任务状态创建任务xTaskCreatexTaskCreateStaticxTaskCreateRestricted 任务优先级和心跳设置心跳设置优先级概述vTaskPrioritySetuxTaskPriorityGet 非运行态扩充阻塞态vTaskDelay挂起状态vTaskSuspend就绪状态完整的状态转换图延迟函数vTa…

Spring Boot的自动装配中的@ConditionalOnBean条件装配注解在Spring启动过程中,是如何保证处理顺序靠后的

前言 为什么Spring Boot条件注解那么多,而标题中是ConditionalOnBean呢? 因为,相比之下我们用的比较多的条件装配注解也就是ConditionalOnClass、ConditionalOnBean了,而ConditionalOnClass对顺序并不敏感(说白了就是判…

stream对list数据进行多字段去重

方法一&#xff1a; //根据sj和name去重 List<NursingHandover> testList list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getj() ";" o.getName() ";&…

《数据结构、算法与应用C++语言描述》-栈的应用-开关盒布线问题

开关盒布线问题 问题描述 在开关盒布线问题中&#xff0c;给定一个矩形布线区域&#xff0c;其外围有若干管脚。两个管脚之间通过布设一条金属线路来连接。这条金属线路称为电线&#xff0c;它被限制在矩形区域内。两条电线交叉会发生电流短路。因此&#xff0c;电线不许交叉…

根据GWAS数据估算样本量N和使用千人基因组填充maf的参考文献

https://github.com/GenomicSEM/GenomicSEM/wiki/2.1-Calculating-Sum-of-Effective-Sample-Size-and-Preparing-GWAS-Summary-Statistics

SpringBoot全局异常处理请求参数校验及响应体包装

一、响应体包装 全局接口响应体包装&#xff0c;返回json数据支持对部分接口或者类放行 # mvc配置mvc:body-exclude-paths:- /test/**body-exclude-classes:- com.qiangesoft.rdp.starter.XXXimport lombok.Data; import org.springframework.boot.context.properties.Configu…

AI绘画本地部署Stable Diffusion web UI

AI绘画本地部署Stable Diffusion web UI 一 、项目介绍 A browser interface based on Gradio library for Stable Diffusion. 项目地址&#xff1a;GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI 这是一个可以通过直接输入描述性文字文本来生成…

Verilog参数定义与仿真模块中的参数修改

文章目录 参数方式定义参数的优势rtl模块中的参数定义模块名后定义参数parameter定义参数 仿真模块中的参数修改例化时修改defparam修改 总结与说明附录&#xff1a;测试代码 参数方式定义参数的优势 当一个模块被另一个模块引用例化时&#xff0c;高层模块可以对低层模块的参…

MD5 绕过第三式:ffifdyop

文章目录 参考环境推荐阅读雾现两个 PHP 文件表结构分析 雾散ASCII 编码二进制数据到 ASCII 文本的转化绕过原理ffifdyop绕过 ffifdyop 的批量化生产批量化生产注意事项细节一字之差运算符优先级 实际需要遵守的规则 生产机器 参考 项目描述搜索引擎Bing、GoogleAI 大模型文心…

幂级数和幂级数的和函数有什么关系?

幂级数和幂级数的和函数有什么关系&#xff1f; 本文例子引用自&#xff1a;80_1幂级数运算&#xff0c;逐项积分、求导【小元老师】高等数学&#xff0c;考研数学 求幂级数 ∑ n 1 ∞ 1 n x n \sum\limits_{n1}^{\infty}\frac{1}{n}x^n n1∑∞​n1​xn 的和函数 &#xff…

分析各种表达式求值过程

目录 算术运算与赋值 编译器常用的两种优化方案 常量传播 常量折叠 加法 Debug编译选项组下编译后的汇编代码分析 Release开启02执行效率优先 减法 Release版下优化和加法一致&#xff0c;不再赘述 乘法 除法 算术结果溢出 自增和自减 关系运算与逻辑运算 JCC指…