Kafka -基本概念

news/2024/9/23 11:20:12/

认识Kafka

kafka是一个多分区、多副本、基于zookeeper协调分布式消息系统。

扮演角色

  • 消息系统
  • 存储系统:把消息持久化到磁盘,相比于其他基于内存存储的系统而言,有效降低了数据丢失的风险。
  • 流式处理平台

基本概念

kafka的体系结构:
在这里插入图片描述

Producer: 负责创建消息,然后将其投递到Kafka中
Consumer: 连接Kafka上并接收消息,进行相应的业务逻辑处理。
Broker: 服务代理节点,负责将收到的消息存储到磁盘中。一个Broker可以看做一个独立的Kafka服务节点。一个或者多个Broker组成了一个Kafka集群。
ZooKeeper: 用来负责Kafka集群元数据管理、控制器管理等操作。
主题: Kafka中的消息以主题作为单位进行归类,生产者将消息发送到特定的主题,消费者负责订阅主题进行消费。

特点

多分区

主题是一个逻辑上的概念,可以细分为多个分区,一个分区只属于单个主题
同一主题下的不同分区包含的消息是不同的,分区在存储层面可以看成一个可追加写的日志文件
消息在被追加到日志文件都会带上一个offset标记,因此同一分区上的消息是有序的,但不同分区的消息不能保证顺序
分区可以分布在不同的Broker上,因此一个主题可以横跨多个Broker,以此来提供比单个broker更强大的能力。(如果是单个Broker,容易受到所在机器I/O的性能限制)

在这里插入图片描述

多副本

概念

Kafka为分区引入了多副本机制,同一分区的不同副本中保存的相同的消息。(某一时刻可能消息不完全一致)
副本之间是"一主多从"的关系,其中leader副本负责处理读写请求,follower副本只负责与leader副本的消息同步。

好处:多副本机制实现了故障的自动转移,当Kafka集群中某个broker失效时候,仍保证服务可用。
在这里插入图片描述

副本集合分类

AR(Assigned Replicas): 所有的副本
ISR(In-Sync Replicas): 与leader副本保持一定程度同步的副本,包括leader在内
OSR(Out-of-Sync Replicas): 与leader副本同步之后过多的副本
AR = ISR + OSR
上面说的一定程度是指可忍受的范围内,该范围参数可以人工调节

leader副本负责维护和跟踪ISR集合中所有follower副本的滞后顺序,当follower副本落后太多或者失效时候,leader副本将其从ISR集合中剔除。
如果OSR集合中有follower副本追上了leader副本,则leader副本会把它从OSR集合中转移到ISR集合中。

Kafka分区副本的复制机制

HW:high watermark 高水位,标识了一个特定的offset,消费者只能消费HW之前的消息。
LEO:Log end offfset,标识当前日志文件中下一条待写入消息的offset
在这里插入图片描述

ISR集合中每个副本都会维护自身的LEO,ISR集合中最小的LEO即为分区的HW,即消费者只能消费该HW之前的消息。

复制图例:

  1. 消息3、4从生产者发出后,会先写入到leader副本
    在这里插入图片描述
  2. follower副本开始同步leader副本在这里插入图片描述
  3. follower同步较快,HW等于follower1与follower2的最小值,此时消费者只能消费到offset为4之前的消息
    在这里插入图片描述
  4. 所有节点都复制好了,HW重新更新
    在这里插入图片描述

这种复制方式的好处:

  • Kafka副本的复制机制,既不是完全的同步复制,又不是单纯的异步复制
  • 若为同步复制,需要等所有的follower都复制完,才认为这条消息是已成功提交的,这种方式会极大影响性能。
  • 若为异步复制,数据只要被leader副本写入就认为成功提交(没等follwer副本复制完全),这时候如果leader副本宕机,则会造成数据丢失。
  • Kafka这种复制方式均衡了数据可靠性和性能之间的关系。

http://www.ppmy.cn/news/1426101.html

相关文章

【大数据】Apache Knox 概述

Apache Knox 概述 1.概述1.1 Kerberos 封装1.2 简化客户端证书的管理1.3 Apache Ranger 集成1.4 Hadoop URLs VS Knox URLs 2.自定义 Apache Knox2.1 Topology2.2 Provider2.3 Services2.4 Personalized services 3.Tips3.1 Setting up SSL3.2 常见问题3.2.1 Bulky answer3.2.2…

【LeetCode热题100】【图论】岛屿数量

题目链接:200. 岛屿数量 - 力扣(LeetCode) 考察图的遍历,从岛上上下左右能到达的地方都是这个岛 首先需要判断图的边界,然后再上下左右继续深度遍历,并把遍历到的标记为已访问,可以原地修改图…

2-内核开发-第一个内核Hello模块开发案例

2-内核开发-第一个内核Hello模块开发案例 课程简介: Linux内核开发入门是一门旨在帮助学习者从最基本的知识开始学习Linux内核开发的入门课程。该课程旨在为对Linux内核开发感兴趣的初学者提供一个扎实的基础,让他们能够理解和参与到Linux内核的开发过程…

从零开始搭建网站(第二天)

今天把之前的htmlcssjs项目迁移过来,直接使用tspiniavue3vite组合,搭建过程可以看从零开始搭建性能完备的网站-思路过程(1)_自己架设一个芯参数网站-CSDN博客。之后安装一下volar扩展。迁移过来使用Vue重构时发现之前使用的左右两…

C++和Java在三种情况下的传值、传引用问题、深浅拷贝问题

关于容器:C++ 和JAVA 中对容器传值的方式 、容器和类变量初始化 面向对象的三大特征:封装、继承、多态 总结 经过各种情况的验证,不论是赋值、传参、还是返回值: Java :基本数据类型+String+库数据类型(BigInteger…)【传值】,数组、容器等各种库、自定义类【传引用】…

12篇 Es命令简介

Elasticsearch是一个基于Apache Lucene构建的开源搜索引擎。它提供了一个分布式、多用户能力的全文搜索引擎,基于RESTful Web接口。以下是一些常用的Elasticsearch命令,这些命令可以帮助你开始使用和管理Elasticsearch: 1. **启动Elasticsea…

Scrapy设置随机User-Agent

大多数情况下,网站都会根据我们的请求头信息来区分你是不是一个爬虫程序,如果一旦识别出这是一个爬虫程序,很容易就会拒绝我们的请求,因此我们需要给我们的爬虫手动添加请求头信息,来模拟浏览器的行为,但是…

【学习】linux实用命令

LINUX命令 普通用户查询系统信息 命令 : [wlm]$ cat /ect/os-release NAME "Kylin" VERSION ""功能: 这个输出会告诉你正在使用的操作系统的名称(NAME)、版本(VERSION 或 VERSION_ID&#xf…