kafka3.X基本概念和使用

news2024/11/15 17:20:52

参考: 【kafka专栏】不用zookeeper怎么安装kafka集群-最新kafka3.0版本

一、kafka集群实例角色规划

在本专栏的之前的一篇文章《kafka3种zk的替代方案》已经为大家介绍过在kafka3.0种已经可以将zookeeper去掉。

上图中黑色代表broker(消息代理服务),褐色/蓝色代表Controller(集群控制器服务)

  • 左图(kafka2.0):一个集群所有节点都是broker角色,kafka从三个broker中选举出来一个Controller控制器,控制器将集群元数据信息(比如主题分类、消费进度等)保存到zookeeper,用于集群各节点之间分布式交互。
  • 右图(kafka3.0):假设一个集群有四个broker,指定三个作为Conreoller角色(蓝色),从三个Controller中选举出来一个Controller作为主控制器(褐色),其他的2个备用。zookeeper不再被需要!相关的元数据信息以kafka日志的形式存在(即:以消息队列消息的形式存在)。
  • controller通信端口:9093, 作用与zk的2181端口类似 。

在搭建kafka3.0集群之前, 我们需要先做好kafka实例角色规划。(四个broker, 需要通过主动配置指定三个作为Controller, Controller需要奇数个, 这一点和zk是一样的)

主机名称ip角色node.id
kafka-vm1192.168.1.111broker,controller1
kafka-vm2192.168.1.112broker,controller2
kafka-vm3192.168.1.113broker,controller3
kafka-vm4192.168.1.114broker4

二、准备工作

  • kafka3.x不再支持JDK8,建议安装JDK11或JDK17。
  • 新建kafka持久化日志数据mkdir -p /data/kafka;并保证安装kafka的用户具有该目录的读写权限。

各个机器节点执行:


   
   
  1. # 安装jdk(kafka3.x不再支持JDK8,建议安装JDK11或JDK17, 这里安装jdk11)
  2. # 下载安装jdk11, 参考: https://blog.csdn.net/justlpf/article/details/127268046
  3. # 下载kafka
  4. adduser kafka
  5. cd /opt
  6. wget https://downloads.apache.org/kafka/3.3.1/kafka_2.12-3.3.1.tgz
  7. tar -xf kafka_2.12-3.3.1.tgz
  8. chown -R kafka:kafka kafka_2.12-3.3.1*
  9. mkdir -p /data/kafka
  10. chown -R kafka:kafka /data/kafka
vi /etc/hosts,各个节点,添加如下内容:

    
    
  1. 192.168.1.111 data-vm1
  2. 192.168.1.112 data-vm2
  3. 192.168.1.113 data-vm3
  4. 192.168.1.114 data-vm4

三、修改Kraft协议配置文件

在kafka3.x版本中,使用Kraft协议代替zookeeper进行集群的Controller选举,所以要针对它进行配置。

vi /opt/kafka_2.12-3.3.1/config/kraft/server.properties
    
    

具体配置参数如下:


    
    
  1. # data-vm1节点
  2. node.id=1
  3. process.roles=broker,controller
  4. listeners=PLAINTEXT://data-vm1:9092,CONTROLLER://data-vm1:9093
  5. advertised.listeners=PLAINTEXT://:9092
  6. controller.quorum.voters=1@data-vm1:9093,2@data-vm2:9093,3@data-vm3:9093
  7. log.dirs=/data/kafka/
  8. # data-vm2节点
  9. node.id=2
  10. process.roles=broker,controller
  11. listeners=PLAINTEXT://data-vm2:9092,CONTROLLER://data-vm2:9093
  12. advertised.listeners=PLAINTEXT://:9092
  13. controller.quorum.voters=1@data-vm1:9093,2@data-vm2:9093,3@data-vm3:9093
  14. log.dirs=/data/kafka/
  15. # data-vm3节点
  16. node.id=3
  17. process.roles=broker,controller
  18. listeners=PLAINTEXT://data-vm3:9092,CONTROLLER://data-vm3:9093
  19. advertised.listeners=PLAINTEXT://:9092
  20. controller.quorum.voters=1@data-vm1:9093,2@data-vm2:9093,3@data-vm3:9093
  21. log.dirs=/data/kafka/
  • node.id:这将作为集群中的节点 ID,唯一标识,按照我们事先规划好的(上文),在不同的服务器上这个值不同。其实就是kafka2.0中的broker.id,只是在3.0版本中kafka实例不再只担任broker角色,也有可能是controller角色,所以改名叫做node节点。
  • process.roles:一个节点可以充当broker或controller或两者兼而有之。按照我们事先规划好的(上文),在不同的服务器上这个值不同。多个角色用逗号分开。
  • listeners: broker将使用9092端口,而kraft controller控制器将使用9093端口。
  • advertised.listeners: 这里指定kafka通过代理暴漏的地址,如果都是局域网使用,就配置PLAINTEXT://:9092即可。
  • controller.quorum.voters:这个配置用于指定controller主控选举的投票节点,所有process.roles包含controller角色的规划节点都要参与,即:zimug1、zimug2、zimug3。其配置格式为:node.id1@host1:9093,node.id2@host2:9093
  • log.dirs:kafka 将存储数据的日志目录,在准备工作中创建好的目录。

所有kafka节点都要按照上文中的节点规划进行配置,完成config/kraft/server.properties配置文件的修改。

四、格式化存储目录

生成一个唯一的集群ID(在一台kafka服务器上执行一次即可),这一个步骤是在安装kafka2.0版本的时候不存在的。


    
    
  1. $ /opt/kafka_2.12-3.3.1/bin/kafka-storage.sh random-uuid
  2. SzIhECn-QbCLzIuNxk1A2A

使用生成的集群ID+配置文件格式化存储目录log.dirs,

所以这一步确认配置及路径确实存在,

并且kafka用户有访问权限(检查准备工作是否做对)。

每一台主机服务器都要执行命令:


    
    
  1. /opt/kafka_2.12-3.3.1/bin/kafka-storage.sh format \
  2. -t SzIhECn-QbCLzIuNxk1A2A \
  3. -c /opt/kafka_2.12-3.3.1/config/kraft/server.properties

格式化操作完成之后,log.dirs​目录下多出一个Meta.properties文件​,存储了当前的kafka节点的id(node.id),当前节点属于哪个集群(cluster.id)


   
   
  1. [root@data-vm2 ~] # ll /data/kafka/
  2. 总用量 8
  3. -rw-r--r--. 1 root root 249 10月 11 18:23 bootstrap.checkpoint
  4. -rw-r--r--. 1 root root 86 10月 11 18:23 meta.properties
  5. $ cat /data/kafka/meta.properties
  6. #
  7. #Tue Apr 12 07:39:07 CST 2022
  8. node.id=1
  9. version=1
  10. cluster.id=SzIhECn-QbCLzIuNxk1A2A

五、 启动集群,完成基础测试

zimug1 zimug2 zimug3是三台应用服务器的主机名称(参考上文中的角色规划),实现方式已经在本专栏《linux主机与ip解析》中进行了说明。将下面的命令集合保存为一个shell脚本,并赋予执行权限。执行该脚本即可启动kafka集群所有的节点,前提是:你已经按照本专栏的《集群各节点之间的ssh免密登录》安装方式做了集群各节点之间的ssh免密登录。

启动命令:


   
   
  1. bin/kafka-server-start.sh \
  2. /opt/kafka_2.12-3.3.1/config/kraft/server.properties
  3. # 后台运行
  4. nohup bin/kafka-server-start.sh \
  5. /opt/kafka_2.12-3.3.1/config/kraft/server.properties 2>&1 &

脚本: 


   
   
  1. #!/bin/bash
  2. kafkaServers= 'data-vm1 data-vm2 data-vm3'
  3. #启动所有的kafka
  4. for kafka in $kafkaServers
  5. do
  6. ssh -T $kafka << EOF
  7. nohup /opt/kafka_2.12-3.3.1/bin/kafka-server-start.sh /opt/kafka_2.12-3.3.1/config/kraft/server.properties 1>/dev/null 2>&1 &
  8. EOF
  9. echo 从节点 $kafka 启动kafka3.0...[ done ]
  10. sleep 5
  11. done

六、一键停止集群脚本

一键停止kafka集群各节点的脚本,与启动脚本的使用方式及原理是一样的。

停止命令:

/opt/kafka_2.12-3.3.1/bin/kafka-server-stop.sh
   
   

执行脚本:


   
   
  1. #!/bin/bash
  2. kafkaServers= 'data-vm1 data-vm2 data-vm3'
  3. #停止所有的kafka
  4. for kafka in $kafkaServers
  5. do
  6. ssh -T $kafka << EOF
  7. cd /opt/kafka_2.12-3.3.1
  8. bin/kafka-server-stop.sh
  9. EOF
  10. echo 从节点 $kafka 停止kafka...[ done ]
  11. sleep 5
  12. done

七、测试Kafka集群

7.1 创建topic


   
   
  1. [root@data-vm1 kafka_2.12-3.3.1] # bin/kafka-topics.sh \
  2. --create \
  3. --topic quickstart-events \
  4. --bootstrap-server data-vm4:9092
  5. Created topic quickstart-events.
  6. [root@data-vm1 kafka_2.12-3.3.1] #
  7. #
  8. [root@data-vm1 kafka_2.12-3.3.1] # bin/kafka-topics.sh \
  9. --create \
  10. --topic quickstart-events \
  11. --bootstrap-server data-vm1:9092,data-vm2:9092,data-vm3:9092

7.2 查看topic列表


   
   
  1. bin/kafka-topics.sh \
  2. --list \
  3. --bootstrap-server data-vm4:9092
  4. #
  5. bin/kafka-topics.sh \
  6. --list \
  7. --bootstrap-server data-vm1:9092,data-vm2:9092,data-vm3:9092,data-vm4:9092

7.3 查看消息详情


   
   
  1. [root@data-vm1 kafka_2.12-3.3.1] # bin/kafka-topics.sh \
  2. --describe \
  3. --topic quickstart-events \
  4. --bootstrap-server data-vm3:9092
  5. Topic: quickstart-events TopicId: zSOJC6wNRRGQ4MudfHLGvQ PartitionCount: 1 ReplicationFactor: 1 Configs: segment.bytes=1073741824
  6. Topic: quickstart-events Partition: 0 Leader: 1 Replicas: 1 Isr: 1
  7. [root@data-vm1 kafka_2.12-3.3.1] #

7.4 生产消息


   
   
  1. [root@data-vm1 kafka_2.12-3.3.1] # bin/kafka-console-producer.sh \
  2. --topic quickstart-events \
  3. --bootstrap-server data-vm1:9092
  4. # 参考: 创建并配置topic
  5. bin/kafka-topics.sh \
  6. --bootstrap-server localhost:9092 \
  7. --create \
  8. --topic my-topic \
  9. --partitions 1 \
  10. --replication-factor 1 \
  11. --config max.message.bytes=64000 \
  12. --config flush.messages=1
  13. # ------------------------- 参考 ------------------------ #
  14. # 1: 修改已创建topic配置
  15. # (Overrides can also be changed or set later using the alter configs command.)
  16. bin/kafka-configs.sh \
  17. --bootstrap-server localhost:9092 \
  18. --entity-type topics \
  19. --entity-name my-topic \
  20. --alter \
  21. --add-config max.message.bytes=128000
  22. # 2: 检查已修改的topic配置是否生效
  23. # (To check overrides set on the topic you can do)
  24. bin/kafka-configs.sh \
  25. --bootstrap-server localhost:9092 \
  26. --entity-type topics \
  27. --entity-name my-topic \
  28. --describe
  29. # 3. 恢复到原来的配置
  30. # (To remove an override you can do)
  31. bin/kafka-configs.sh \
  32. --bootstrap-server localhost:9092 \
  33. --entity-type topics \
  34. --entity-name my-topic \
  35. --alter \
  36. --delete-config max.message.bytes
  37. # 4. 增加分区数
  38. # (To add partitions you can do)
  39. bin/kafka-topics.sh \
  40. --bootstrap-server broker_host:port \
  41. --alter \
  42. --topic my_topic_name \
  43. --partitions 40
  44. # 5. 添加配置
  45. # (To add configs:)
  46. bin/kafka-configs.sh \
  47. --bootstrap-server broker_host:port \
  48. --entity-type topics \
  49. --entity-name my_topic_name \
  50. --alter \
  51. --add-config x=y
  52. # 6. 移除配置
  53. # (To remove a config:)
  54. bin/kafka-configs.sh \
  55. --bootstrap-server broker_host:port \
  56. --entity-type topics \
  57. --entity-name my_topic_name \
  58. --alter \
  59. --delete-config x
  60. # 7. 删除topic
  61. # (And finally deleting a topic:)
  62. bin/kafka-topics.sh \
  63. --bootstrap-server broker_host:port \
  64. --delete \
  65. --topic my_topic_name

7.5 消费消息


   
   
  1. bin/kafka-console-consumer.sh \
  2. --topic quickstart-events \
  3. --from-beginning \
  4. --bootstrap-server data-vm4:9092

7.6 查看消费者组


   
   
  1. # 检查消费者postition
  2. # Checking consumer position
  3. bin/kafka-consumer-groups.sh \
  4. --bootstrap-server localhost:9092 \
  5. --describe \
  6. --group my-group
  7. TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
  8. my-topic 0 2 4 2 consumer-1-029af89c-873c-4751-a720-cefd41a669d6 /127.0.0.1 consumer-1
  9. my-topic 1 2 3 1 consumer-1-029af89c-873c-4751-a720-cefd41a669d6 /127.0.0.1 consumer-1
  10. my-topic 2 2 3 1 consumer-2-42c1abd4-e3b2-425d-a8bb-e1ea49b29bb2 /127.0.0.1 consumer-2

7.7 查看消费者组列表


   
   
  1. # list all consumer groups across all topics
  2. bin/kafka-consumer-groups.sh \
  3. --bootstrap-server localhost:9092 \
  4. --list
  5. test-consumer-group
  6. # To view offsets, as mentioned earlier,
  7. # we "describe" the consumer group like this:
  8. bin/kafka-consumer-groups.sh \
  9. --bootstrap-server localhost:9092 \
  10. --describe \
  11. --group my-group
  12. TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
  13. topic3 0 241019 395308 154289 consumer2-e76ea8c3-5d30-4299-9005-47eb41f3d3c4 /127.0.0.1 consumer2
  14. topic2 1 520678 803288 282610 consumer2-e76ea8c3-5d30-4299-9005-47eb41f3d3c4 /127.0.0.1 consumer2
  15. topic3 1 241018 398817 157799 consumer2-e76ea8c3-5d30-4299-9005-47eb41f3d3c4 /127.0.0.1 consumer2
  16. topic1 0 854144 855809 1665 consumer1-3fc8d6f1-581a-4472-bdf3-3515b4aee8c1 /127.0.0.1 consumer1
  17. topic2 0 460537 803290 342753 consumer1-3fc8d6f1-581a-4472-bdf3-3515b4aee8c1 /127.0.0.1 consumer1
  18. topic3 2 243655 398812 155157 consumer4-117fe4d3-c6c1-4178-8ee9-eb4a3954bee0 /127.0.0.1 consumer4
  19. # 更多配置参考:
  20. # https://kafka.apache.org/32/documentation.html#uses

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

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

相关文章

1221. 四平方和--(暴力,二分)

题目&#xff1a; 1221. 四平方和 - AcWing题库 思路1&#xff1a;暴力 暴力枚举 1.枚举顺序为从a到c&#xff0c;依次增大。 2.tn-a*a-b*b-c*c&#xff0c;求得dsqrt(t) 3.判断求出的d是否成立。d要求&#xff1a;d*dt&&d>c #include<iostream> #include&…

项目管理工具ConceptDraw PROJECT mac中文版自定义列功能

ConceptDraw PROJECT Mac是一款专业的项目管理工具&#xff0c;适用于MacOS平台。它提供了成功规划和执行项目所需的完整功能&#xff0c;包括任务和资源管理、报告和变更控制。 这款软件可以与ConceptDraw office集成&#xff0c;利用思维导图和数据可视化的强大功能来改进项目…

TCP / UDP 概念 + 实验(计网自顶向下)

Github源码 moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES: 《计算机网络&#xff0d;自顶向下方法(原书第6版)》编程作业&#xff0c;Wireshark实验文档的翻译和解答。 (github.com) 暂定打算分2步走&#xff0c;前置是中科大对应计网黑书的视频 第1步完成14个Wire…

Linux 用户必备的 Git 图形化工具

Git 是一个免费的开源分布式版本控制系统&#xff0c;用于软件开发和其他几个版本控制任务。它旨在根据速度、效率和数据完整性来处理从小到大的项目。 Linux 用户主要可以通过命令行管理 Git&#xff0c;但是&#xff0c;有几个图形用户界面 (GUI) Git 客户端可以促进在 Linux…

讯飞星火升级 3.0:整体超越 ChatGPT,2024 年将实现对标 GPT-4

距离上一个大版本仅两个月过去&#xff0c;科大讯飞在 1024 对外正式推出讯飞星火认知大模型 3.0 版本。 今年 5 月&#xff0c;讯飞星火认知大模型刚刚面世时&#xff0c;科大讯飞董事长刘庆峰曾立下 Flag&#xff1a;10 月 24 日&#xff0c;星火认知大模型的能力要全面对标…

『第三章』雨燕栖息地:Swift 开发环境

在本篇博文中,您将学到如下内容: 1. Swift 开发平台2. Swift 集成开发环境 Xcode&#xff1f;3. 原型试验场&#xff1a;Playground4. 另一种尝试&#xff1a;iPad 上的 Swift Playgrounds5. Swift 交互实验室&#xff1a;Swift REPL总结 咫尺春三月&#xff0c;寻常百姓家。为…

单源最短路径 -- Dijkstra

Dijkstra算法就适用于解决带权重的有向图上的单源最短路径问题 -- 同时算法要求图中所有边的权重非负&#xff08;这个很重要&#xff09; 针对一个带权有向图G &#xff0c; 将所有节点分为两组S和Q &#xff0c; S是已经确定的最短路径的节点集合&#xff0c;在初始时为空&…

重构之美:Java Swing中 如何对指定行文本进行CSS样式渲染,三种实现思路分享

文章目录 需求分析Document 应用彩蛋 需求分析 在Swing中&#xff0c;如果期望实现对JTextArea 或者 TextPane等文本区域实现单行渲染改怎么做&#xff1f;如上图所示 总的来说有两种实现方案 文本行数可控&#xff0c;那么构造一组JLabel集合按表单顺序添加&#xff0c;这样可…

视频相关学习笔记

YUV 和rgb一样是一种表示色彩的格式&#xff0c;Y表示亮度&#xff0c;UV表示色度&#xff08;U是蓝色投影&#xff0c;V是红色投影&#xff09;&#xff0c;只有Y就是黑白的&#xff0c;所以这个格式的视频图片可以兼容黑白电视&#xff0c;所以彩色电视使用的都是YUV 存储方…

查找算法-斐波那契查找法(Fibonacci Search)

目录 查找算法-斐波那契查找法&#xff08;Fibonacci Search&#xff09; 1、说明 2、算法分析 3、C代码 查找算法-斐波那契查找法&#xff08;Fibonacci Search&#xff09; 1、说明 斐波那契查找法又称为斐氏查找法&#xff0c;此查找法和二分法一样都是以分割范围来进…

第12章 PyTorch图像分割代码框架-1

从本章开始&#xff0c;本书将会进行深度学习图像分割的实战阶段。PyTorch作为目前最为流行的一款深度学习计算框架&#xff0c;在计算机视觉和图像分割任务中已经广泛使用。本章将介绍基于PyTorch的深度学习图像分割代码框架&#xff0c;在总体框架的基础上&#xff0c;基于PA…

kuaishou web端did注册激活 学习记录

快手web端 did 注册激活的流程大概如下&#xff1a; 1.访问web端的接口&#xff0c;主动触发滑块&#xff0c;拿到滑块信息 2.然后滑块验证did 获取captchaToken 3.携带captchaToken访问接口 4.最后校验web端的did 是否激活 最后激活以后的效果如下&#xff1a; 经过测试&…

微服务-服务拆分

文章目录 服务拆分及注意事项服务拆分案例案例代码分析 服务拆分及注意事项 每个服务有独立的数据库&#xff0c;订单模块需要查询用户信息时&#xff0c;通过调用用户模块的接口&#xff0c;自身的数据库并没有用户信息。 服务拆分案例 案例结构 案例有2个微服务&#xff0c;…

【跟小嘉学 Rust 编程】三十三、Rust的Web开发框架之一: Actix-Web的基础

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…

基于Kubesphere容器云平台物联网云平台Devops实践

基于Kubesphere容器云平台物联网云平台Devops实践 项目背景 ​ 公司是做工业物联网相关业务的&#xff0c;现业务是云平台&#xff0c;技术栈 后端为 Springboot2.7JDK11 &#xff0c;前端为 Vue3Ts&#xff0c;需要搭建自动化运维平台以实现业务代码自动部署上线&#xff0c;…

【C++笔记】如何用检查TCP或UDP端口是否被占用

一、检查步骤 使用socket函数创建socket_fd套接字。使用sockaddr_in结构体配置协议和端口号。使用bind函数尝试与端口进行绑定&#xff0c;成功返回0表示未被占用&#xff0c;失败返回-1表示已被占用。 二、步骤详解 2.1 socket函数 socket 函数是用于创建套接字的函数&…

【MySql】9- 实践篇(七)

文章目录 1. 一主多从的主备切换1.1 基于位点的主备切换1.2 GTID1.3 基于 GTID 的主备切换1.4 GTID 和在线 DDL 2. 读写分离问题2.1 强制走主库方案2.2 Sleep 方案2.3 判断主备无延迟方案2.4 配合 semi-sync方案2.5 等主库位点方案2.6 GTID 方案 3. 如何判断数据库是否出问题了…

Django 实战开发(一)项目搭建

1.项目搭建 用pycharm 编辑器可以直接 New 一个 Django 项目 2.新建应用 python manage.py startapp demo项目结构如下: 3.编写第一个Django 视图函数 /demo/views: from django.http import HttpResponse def welcome(request):return HttpResponse("welcome to dja…

品牌媒介工作流程是什么,媒体投放目标怎么做?

品牌媒介其实说简单也很简单&#xff0c;说难也很难&#xff0c;简单在于其实事情流程简洁&#xff0c;难呢&#xff0c;在于很多东西如果不亲身体验是无法领悟到精髓的。今天为大家分享下品牌媒介工作流程是什么&#xff0c;媒体投放目标怎么做&#xff1f; 我们怎么才能在媒体…

JWT的封装、[Authorize]的使用

JWT的封装 需要安装两个包。 包1&#xff1a;System.IdentityModel.Tokens.Jwt Install-Package System.IdentityModel.Tokens.Jwt 包2&#xff1a;Microsoft.AspNetCore.Authentication.JwtBearer Install-Package Microsoft.AspNetCore.Authentication.JwtBearer 我们创建一…