【Kafka-架构及基本原理】Kafka生产者、消费者、Broker原理解析 Kafka原理流程图

news2024/10/7 3:50:24

【Kafka-架构及基本原理】Kafka生产者、消费者、Broker原理解析 & Kafka原理流程图

  • 1)Kafka原理
    • 1.1.生产者流程细节
    • 1.2.Broker 的存储流程细节
    • 1.3.消费者流程细节
  • 2)Kafka读写流程图

1)Kafka原理

1.1.生产者流程细节

1、生产者发送消息到 Kafka 集群,是以推送的方式发送的。

2、生产者只需要连接任意一台 Kafka 节点即可。

3、生产者发送的消息会被封装成为一个 record 对象,其中包含了发送的主题,分区,key,value。

4、发送出去的消息是如何进行分区的呢?

  • 如果是没有指定分区和 key,那么就会按照轮循的方式进行循环分区。

  • 如果是指定了 key 但是没有指定分区,那么就会按照 DefaultPartitioner 这个类进行分区,底层使用 hash 取模的方式进行分区。

  • 如果是指定了分区,那么就会按照指定的分区将所有的 value 都发送到一个分区中(优先级最高)

  • 可以自定义分区类(根据 DefaultPartitioner 来进行模仿即可)

    注意在这个过程中的 key 只是逻辑上的一个业务标记(key 是可以重复的),而 value 才是消息中的真正内容。

5、分区的作用?

  • 提高读写的效率。

  • 增大了集群的扩容性(机器增加的时候可以对分区数进行增加)

  • 方便消费者负载均衡(消费者数=分区数)

6、每一条消息发送给 Kafka 集群的时候,首先发送到一个缓冲区中,然后以 batch 的方式发送给 Kafka,并且按照顺序写入的方式追加到文件中。

7、每一条消息发送给分区之后都会有一个。唯一标识 offset(偏移量),offset 是区内有序的,全局无序的,也就是说 Kafka 具有局部有序的特性。

1.2.Broker 的存储流程细节

1、消息到达 Kafka 之后会根据分区规则进入到指定的分区中(分区是分散在各个节点中的,一般分区数与 Broker 数量成倍数关系,保证均衡性)

2、分区其实就是物理层面上的文件夹。

3、分区下面还有文件的分段(segment)(和 hive 中的分桶差不多),每个 segment 由 index 索引文件和 log 日志文件组成,index 文件中记录着信息的索引,log 文件中记录的就是消息的内容。

4、查询的时候会先到 index 文件中根据 offset 找到 log 文件中对应的消息的位置。

5、数据并不是一直存储在 Kafka 中的,会有删除策略。

  • 首先文件达到一定的时间(默认时间是七天,168小时)的时候,就会对数据进行自动删除。

  • 其次就是文件达到一定的大小就会删除。

    注意数可以在配置文件中随时进行修改。

6、数据越来越多也不会对Kafka的读写产生影响,因为:

  • 写入:各分区采用的是顺序写入,追加的方式。

  • Kafka 的 index 文件是采用的二分查找法,数据越多查找的越爽。

1.3.消费者流程细节

1、消费者从 Kafka 中消费消息采用的是拉取的模式。

2、消费者连接 Kafka 集群中的任意一个节点,并且指定想要订阅的主题或者主题 + 分区。

3、消费者从哪个偏移量开始消费,由 auto、offset、reset 决定。

  • earliest:如果有 offset 记录的位置,就从记录的位置开始消费,如果没有 offset 的记录,就从最早的位置开始消费。

  • latest:如果有 offset 记录的位置,就从记录的位置开始消费,如果没有 offset 的记录,就从最新的位置开始消费。

  • none:如果有 offset 提交记录,就从记录位置开始消费,没有则报错。

4、消费者消费数据之后需要提交 offset。

  • 自动提交:按照固定的时间间隔进行提交(提交到默认主题:__consumer_offsets)

  • 手动提交:可以自定义没消费多少条,统一提交一次,也就是说可以分批提交。

    注意提交的信息包括,消费者消费到哪个主题的哪个分区了的哪个偏移量了。

5、消费者组内可以有多个消费者(如果没有设置消费者组就会有默认的消费者组,但是建议手动设置,方便管理)

注意:同一时间的一条消息只能被一个消费者组内的一个消费者所消费,但是可以被不同的消费者组的消费者再次消费。

6、消费者组中的消费者数量建议等于分区数。

2)Kafka读写流程图

在这里插入图片描述

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

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

相关文章

计算机毕业设计源码整合大全_kaic

以下为具体单个列表(单个下载在我主页搜索即可): 1:计算机专业-ASP(499套) ASP学生公寓管理系统的设计与实现(源代码论文).rar 1:计算机专业-ASP(499套) ASP学科建设设计(源代码论文).ra…

Clickhouse 引擎之MergeTree详解

分区详解 数据存储底层分布 # 数据在这个位置 rootfjj001:~# cd /var/lib/clickhouse/data rootfjj001:/var/lib/clickhouse/data# ls # 数据库 default system rootfjj001:/var/lib/clickhouse/data# cd default/ rootfjj001:/var/lib/clickhouse/data/default# ls #表 enu…

ASEMI代理AD8400ARZ10-REEL原装ADI车规级AD8226ARZ-R7

编辑:ll ASEMI代理AD8400ARZ10-REEL原装ADI车规级AD8226ARZ-R7 型号:AD8400ARZ10-REEL 品牌:ADI/亚德诺 封装:SOIC-8 批号:2023 引脚数量:8 安装类型:表面贴装型 AD8400ARZ10-REEL汽车芯…

Zabbix监控系统——附详细步骤和图解

文章目录一、Zabbix概述1、使用zabbix的原因2、zabbix的概念和构成3、zabbix 监控原理:4、zabbix的程序组件二、安装 zabbix 5.01、部署 zabbix 服务端的操作步骤2、实例操作:部署 zabbix 服务端3、部署 zabbix 客户端4、实例操作:部署 zabbi…

【Linux】揭开套接字编程的神秘面纱(下)

​🌠 作者:阿亮joy. 🎆专栏:《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉前言&…

(二十三)槽函数的书写规则导致槽函数触发2次的问题

在创建QT的信号和槽时,经常无意间保留着QT书写槽函数的习惯,或者在QT设计界面直接右键【转到槽】去创建槽函数,但是后期需要用到disconnect时,又重新写了一遍connect函数,那么你会发现实际槽函数执行了2遍。 首先来看…

要在Ubuntu中查找进程的PID,可以使用pgrep或pidof命令。

一 查找进程 1.pgrep命令 pgrep命令可以根据进程名或其他属性查找进程的PID。例如,要查找名为"firefox"的进程的PID,可以在终端中输入以下命令: pgrep firefox如果有多个名为"firefox"的进程,pgrep命令将返…

互联网一个赛道只剩下几家,真要爆品

互联网一个赛道剩下几家,真要爆品 2017年的书,案例基本上是马后炮总结 趣讲大白话:说起来容易,做起来难 【趣讲信息科技136期】 **************************** 书中讲的范冰冰翻车了 书中不看好的线下渠道,现在成香饽饽…

面试篇-Java并发之CAS:掌握原理、优缺点和应用场景分析,避免竞态问题

1、CAS介绍及原理 多线程中的CAS(Compare-and-Swap)操作是一种常见的并发控制方法,用于实现原子性更新共享变量的值。其核心思想是通过比较内存地址上的值和期望值是否相等来确定是否可以进行更新操作,从而避免多线程条件下的竞态…

HMI实时显示网络摄像机监控画面——以海康威视网络摄像机为例

随着IOT技术的快速发展,网络摄像机快速应用于工业领域,结合其他智能设备建立一个智能系统,提高用户与机器设备之间的交互体验,帮助企业优化人员配置。 作为重要的可视化设备,HMI不仅可以采集现场设备数据,…

uniapp系列-使用uniapp携带收件人信息调用手机邮件应用发邮件的2种方案

背景描述 我们使用uniapp打包之后,某些情况下,需要使用uniapp打开手机其他应用去发邮件,携带对方email 信息以及主题信息等,那我们应该怎么处理呢? 方案一:使用uniapp标签-uni-link,注意这种方…

BGP实验(一)

实验要求: 1、As1存在两个环回,一个地址为192.168.1.0/24,该地址不能在任何协议中宣告, As3存在两个环回,.一个地址为192.168.2.0/24,该地址不能在任何协议中宣告, As1还有一个环回地址为10.1.1.0/24&…

研读Rust圣经解析——Rust learn-8(match,if-let简洁控制流,包管理)

研读Rust圣经解析——Rust learn-8(match,if-let简洁控制流,包管理)matchother和占位符_区别easy matchenum matchno valuematch innerOption matchmore better wayif-let整洁控制包管理模块(mod)拆分声明modpub公开use展开引用拆解模块结构m…

docker cmd

sudo docker run --gpus all --name uavrl1 themvs/uav_swarm_reinforcement_learning sudo docker p s-a 86850d5a9dc3 sudo docker run --gpus all --name uavrl12 uavrl:v1.2 ---------- 共享屏幕输入类似指令,实测可行 sudo docker run -it --nethost --ipc…

Leetcode每日一题——“轮转数组”

各位CSDN的uu们你们好呀,今天,小雅兰的内容是轮转数组,下面,让我们进入轮转数组的世界吧 小雅兰之前其实就已经写过了字符串旋转的问题了: C语言刷题(7)(字符串旋转问题&#xff09…

优化 Kafka 的生产者和消费者

背景 如今,分布式架构已经成为事实上的架构模范,这使得通过 REST API 和 消息中间件来降低微服务之间的耦合变得必然。就消息中间件而言,Apache Kafka 已经普遍存在于如今的分布式系统中。Apache Kafka 是一个强大的、分布式的、备份的消息服…

HBase高手之路5—HBase的JavaAPI编程

文章目录Hbase高手之路5—Hbase的JavaAPI编程一、需求与数据集二、准备工作1.下载安装Java2.下载安装Idea3.下载安装maven4.Maven配置国内的镜像库5.Idea使用自定义的maven配置6.创建一个maven测试项目7.创建所需要的包8.创建类文件,输入代码9.运行项目三、创建HBas…

【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 详细建模过程解析及代码实现

更新信息:2023-4-15 更新了代码 【2023 年第十三届 MathorCup 高校数学建模挑战赛】A 题 量子计算机在信用评分卡组合优化中的应用 更新信息:2023-4-15 更新了代码 1 题目 在银行信用卡或相关的贷款等业务中,对客户授信之前,需…

Linux程序的内存

要研究程序的运行环境,首先要弄明白程序与内存的关系。程序与内存的关系,好比鱼和水一般密不可分。内存是承载程序运行的介质,也是程序进行各种运算和表达的场所。了解程序如何使用内存,对程序本身的理解,以及后续章节…

【CSS-Part3 样式显示模式、背景设置、三大特性 】

CSS-Part3 样式显示模式、背景设置、三大特性一 CSS元素显示模式:1.1块元素:1.2行内元素:1.3行内块元素:(同时具有行内元素和块元素的特点)元素显示模式总结:1.4元素显示模式转换:一种模式的元素需要另一模…