Kafka基础架构与核心概念

news2024/11/24 12:08:22

Kafka简介

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。架构特点是分区、多副本、多生产者、多订阅者,性能特点主要是高吞吐,低时延。

Kafka主要设计特征如下:

  • 通过时间复杂度为O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。

  • 高吞吐量 :即使是非常普通的硬件机器,Kafka也可以支持每秒数百万的消息。

  • 支持Kafka 服务间的消息分区,及分布式消费,同时保证每个分区内的消息顺序传输。

  • 同时支持离线数据处理和实时数据处理。

  • 支持数据水平扩展和副本备份

  • Kafka集群按照主题分类管理,一个主题可以有多个分区,一个分区可以有多个副本分区(分区的容灾手段)

Kafka的消息传递模型使用的是发布-订阅模块,对于消息的消费使用的是消费者主动拉取模型,并不像rocketmq、rabbitmq等主流消息中间件提供服务端推送消息服务。如果要实现类似于推送的效果,只能通过消费者轮询的方式。

Kafka主要有如下几个核心API:

  • Admin API 主要用于管理和检查Topics, brokers和其他kafka对象

  • Producer API:发布消息、事件流到一个或多个kafka主题

  • Consumer API:订阅一个或多个kafka主题,处理producer api发布的事件流消息

  • Streams API:kafka通过流api来实现流处理应用程序和微服务。它提供了处理事件流的高级功能,包括转换、聚合和连接等有状态操作、窗口化、基于事件时间的处理等等。从一个或多个主题中读取输入,以便生成到一个或多个主题的输出,有效地将输入流转换为输出流。

  • Connector API:kafka连接api来构建和运行可重用的数据导入/导出连接器,这些连接器使用(读取)或产生(写)来自外部系统和应用程序的事件流,以便它们可以与kafka集成。例如,像postgresql这样的关系数据库的连接器可能会捕获对一组表的所有更改。然而,在实践中,您通常不需要实现您自己的连接器,因为kafka社区已经提供了数百个现成的连接器。

Kafka优势

  • 高吞吐:单机每秒吞吐几十上百万消息

  • 高性能:单节点支持上千个客户端,并保证零停机和零数据丢失

  • 数据持久化存储:通过将消息持久化到硬盘以及分区副本备份机制防止数据丢失

  • 支持分布式水平扩容,集群副本化容灾部署。Producer、Broker和Consumer均支持集群化

  • 可靠性:通过主题分区扩容,副本容灾,集群化等手段提供高可靠性

  • 客户端状态维护:消息被处理的状态是在Consumer端维护,而不是由server端维护。当失败时能自动平衡

  • 提供多种语言的客户端sdk。Kafka支持Java、.NET、PHP、Python等多种语言

Kafka应用场景

Kafka主要应用场景:日志收集系统、消息队列系统、用户活动跟踪等。

  • 日志收集:用于收集各种服务的日志

  • 消息系统:用于解耦生产者、消费者,缓存消息等场景,

  • 用户活动跟踪:如对用户在网站的搜索、点击等行为的实时监控分析

  • 运营指标:用于记录运营监控数据

  • 流式处理:构建实时的流数据处理程序来转换或处理数据流

Kafka基础架构与核心概念

 

根据如上基础架构图,大致可以看出kafka有如下架构特点:

  • 多生产者

  • 基础主题对消息进行分类

  • 一个主题支持多个分区(数据的水平扩容),分区的容灾是基于Kraft数据一致性协议的多副本机制,分Leader副本和Follwer副本

  • 多个broker,不同broker可存储不同的分区和分区副本

  • 消费者按组进行消费,在同一个消费组内,一个分区消息只能被一个消费者消费,因此对于同一消费组的某个消费者来说,它的消息是有序的,但对于不同消费者来说,它们之间的消息不能做到有序。需要严格顺序的情况下只能设置一个分区来解决。

消息和批次

Kafka的数据单元称为消息,可以把消息看成是数据库里的一条“记录”。消息主要由消息头、主题、分区、键、值、消息偏移量等信息组成,为提高效率,消息通常是分批写入Kafka,批次就是一组消息,这些消息属于同一个主题和分区。同一批次的消息可以进行压缩以提升网络传输能力,批次越大,消息越多,单次网络传输时间越长,但比起小批次消息来说还是减少了网络开销,因为大批次消息需要传输的次数更少。

主题(Topic)和分区(Partition)

Kafka的消息通过主题进行分类。主题可以被分为若干分区,一个主题通过分区分布于Kafka集群中,提供了横向扩展的能力。主题跟分区,用关系型数据库来类比 的话就是表和数据分片,其本质是一样的,都是存储数据和数据扩容的一种方式。

 

副本(Replicas)

Kafka 使用主题来组织数据,每个主题被分为若干个分区,每个分区有多个副本。那些副本被保存在broker 上,每个broker 可以保存成百上千个属于不同主题和分区的副本。

副本有两种角色,Leader和Follwer,数据一致性基于Raft协议。master的选举、数据的复制参考raft协议即可。

AR(Assigned Repllicas)

分区中的所有副本统称为AR(Assigned Repllicas)。

ISR(In-Sync Replicas)

所有与leader副本保持一定程度同步的副本(包括Leader)组成ISR(In-Sync Replicas),ISR集合是AR集合中的一个子集。消息会先发送到leader副本,然后follower副本才能从leader副本中拉取消息进行同步,同步期间内follower副本相对于leader副本而言会有一定程度的滞后。

OSR(Out-Sync Relipcas)

与leader副本同步滞后过多的副本(不包括leader)副本,组成OSR(Out-Sync Relipcas)。

AR=ISR+OSR(通常为空)

High Watermak

HW是High Watermak的缩写, 俗称高水位,它表示了一个特定消息的偏移量(offset),消费之只能拉取到这个offset之前的消息。

LEO

LEO是Log End Offset的缩写,它表示了当前日志文件中下一条待写入消息的offset。

生产者(Producer)和消费者(Consumer)

生产者(Producer):向主题发布消息。生产者默认情况下把消息均衡地分布到主题的所有分区上,策略有轮询指定分区、消息key hash值对分区数取模,指定分区。

消费者Consumer):订阅主题消息,消费者通过偏移量来区分已经读过的消息。

消费者群组:一个主题可以有多个分区,一个分区可以被不同的消费者群组消费,但一个分区在同一消费者群组内只能被一个消费者消费(避免重复消费)。群组消费可以加强消费能力,避免消息过度堆积,但同时带来了无法做到严格有序消费问题。

 

broker和集群

broker 是集群的组成部分,broker 集群由一个或多个 broker 组成,每个集群都有一个 broker 同时充当了集群控制器的角色(自动选举)。broker接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。broker为消费者提供服务,对读取分区的请求做出响应,返回已经提交到磁盘上的消息。单个broker可以轻松处理数千个分区以及每秒百万级的消息量。

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

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

相关文章

测试人必看:五大维度解读软件测试分类

软件测试方法种类繁多,记忆起来也非常混乱, 如果把软件测试方法进行多个维度的分类, 就会清晰很多。 软件测试的分类-按开发阶段分类 单元测试 又称模块测试,针对软件设计中的最小单位-程序模块,进行正确性检查的测试工作。单元…

谷粒商城第五天-将项目改为基于若依框架实现、使用若依进行代码生成(生成MyBatisPlus风格)

目录 一、使用若依框架来搭建后台管理系统 1.1 前端部分 1.2 后端部分 1.2.1 将若依框架植入到项目中 1.2.2 完成数据库配置 二、使用若依框架的逆向生成工具逆向生成代码(同时将代码风格改为MyBatisPlus) 2.1 使用若依框架提供的逆向生成工具生成…

思科路由器交换机密码破解教程

1. 路由器密码的恢复. 2600、3600等新系列路由器步骤: 1、启动路由器,60秒内按下ctrlbreak键2、rommon>confreg 0x21423、rommon>reset4、router#copy startup-config running-config5、router(config)#no enable secrect //可以删除密码也可以更…

linux升级mysql

linux升级mysql 一.介绍二.下载三.文件配置1.查找删除mysql2.解压配置 四.修改配置五.初始化mysql服务六.启动mysql七.配置数据库七.测试 一.介绍 由于最近业务需要,不得不将之前的mysql5.7.26升级到mysql8.0加了 Linux安装mysql(5.7.26)&…

浅谈SSM框架理论相关知识_kaic

一、SSM框架简介 SSM框架是Spring MVC ,Spring和Mybatis框架的整合,是标准的MVC模式,将整个系统划分为View层,Controller层,Service层,DAO层四层,使用Spring MVC负责请求的转发和视图管理&…

项目管理:甘特图制定项目计划,提高项目管理效率

项目实施周期长,工作范围广,不确定因素多,因此项目管理具有巨大的挑战性。 项目经理需要具备专业的知识能力和个人应变能力,以管理整个项目的实施过程,提高项目实施的成功率和管理效率。 现在,随着社会市…

opencv-16 图像去水印示例

常用的去水印方法: 克隆修复工具:使用图像处理软件(如Photoshop)中的克隆修复工具可以选择一个样本区域,然后将其复制到水印区域,以覆盖水印。这种方法在简单的水印上可能效果不错,但复杂的水印…

CMU 15-445 -- Concurrency Control Theory - 13

CMU 15-445 -- Concurrency Control Theory - 13 引言TransactionsStrawman/Simple SystemFormal DefinitionsAtomicityLoggingShadow Paging ConsistencyIsolationConflicting OperationsDependency Graphs(依赖图)VIEW SERIALIZABILITY(视图可串行化) …

配置SQL提示

问题描述 SpringBoot工程中:使用Select注入的时候没有提示 例如: 在正常情况下: 在没有配置SQL提示的时候: 原因分析: 没有进行SQL配置 解决方案: 选中Select注入中的SQL语句,使用IDEA中的快…

第二天 kali代理配置

文章目录 环境一、虚拟机网络模式(1)NAT(2)NAT模式(3)桥接模式(4)仅主机模式(5)总结 二、配置代理(桥接模式)1、基础设置2、虚拟机浏览…

GO语言安全工具开发方向探索

声明:文章所涉及的代码进攻参考和学习,文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 文章目录…

ubuntu环境安装centos7虚拟机网络主机不可达,ping不通

【NAT模式下解决】1.首先vi /etc/sysconfig/network-scripts/ifcfg-ens33检查ONBOOTyes,保存 2.输入systemctl restart network命令重启网关

数据结构【排序】

第七章 排序 一、排序 1.定义:将无序的数排好序 ; 2.稳定性: Kᵢ和Kⱼ中,Kᵢ优先于Kⱼ那么在排序后的记录中仍然保持Kᵢ优先; 3.评价标准:执行时间和所需的辅助空间,其次是算法的稳定性&#xf…

三,创建订单微服务消费者 第三章

4.3 修改pom添加依赖 <dependencies><!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--监控--><dependency><groupId&g…

ssm笔记

1.IOC和DI配置文件开发 spring&#xff0c;主要内容有两点&#xff1a;IOC&#xff0c;AOP。AOP里面spring独到的事务处理。 理清spring框架设计思想 1.1.Spring Framework系统架构 spring4架构图 系统架构讲究上层依赖于下层 Data Access&#xff1a;数据访问Data Inte…

Win10查看端口占用的方法,并且释放端口

1、按下winR&#xff0c;输入“cmd”&#xff0c;进入黑窗口 2、查询端口&#xff0c;获取到pid //查询所有的端口 netstat -ano//查询指定端口 netstat -ano|findstr 8080 3、查看指定 Pid 进程信息&#xff0c;获取到其运行的服务是什么&#xff0c;这里运行的是Java服务&a…

IIC 学习笔记

IIC 学习笔记 参考链接 https://www.bilibili.com/video/BV1dg4y1H773/?-Arouterstory&buvidXU95A24969E15627051070CAD21A455F5D312&is_story_h5false&midqdyXUrDWOqUn9wT3ra56lA%3D%3D&p1&plat_id163&share_fromugc&share_mediumandroid&…

Jmeter常见问题之URI异常

这篇文章介绍一下"http://"重复导致的URI异常问题&#xff0c;通常从浏览器地址栏复制url&#xff0c;直接粘贴到Jmeter的http请求的服务器地址中会默认带上“http://”&#xff0c;要将http://删除&#xff0c;只写IP地址&#xff0c;如下图&#xff1a; 否则&…

TCP实现原理和为什么需要三次握手?两次握手不可以?四次握手不可以?

TCP实现原理和为什么需要三次握手?两次握手不可以?四次握手不可以? 1. 什么是TCP协议? TCP&#xff1a;Transmission Control Protocol翻译过来就是传输控制协议,TCP协议是一个面向连接的、可靠的、基于字节流的传输层协议RFC 793对TCP连接的定义 > Connections: >…

深度学习常用优化器总结,具详细(SGD,Momentum,AdaGrad,Rmsprop,Adam,Adamw)

学习需要&#xff0c;总结一些常用优化器。 目录 前言SGD&#xff1a;随机梯度下降BGD&#xff1a;批量梯度下降MBGD&#xff1a;小批量梯度下降MomentumAdaGradRMSpropAdam: Adaptive Moment EstimationAdamW参考文章 前言 优化器的本质是使用不同的策略进行参数更新。常用的…