当前位置: 首页 > news >正文

Kafka原理及概念解释

1、zookeeper作用

zookeeper在kafka中扮演了重要的角色,kafka使用zookeeper进行元数据管理,保存broker注册信息,包括主题(Topic)、分区(Partition)信息等,选择分区leader,在低版本kafka消费者的offset信息也会保存在zookeeper中。

kafka在zookeeper上存储的brokers节点信息如下:
在这里插入图片描述
其中/brokers/ids/[0...n]:是使用临时节点存储在线的是各个服务节点的信息,当下线后自动删除;

2、broker

        可以简单理解集群节点,一个节点配置一个broker

        但是单节点可以通过相同IP的不同端口号配置多个broker,其实就是伪集群

        应用中broker的数量最好大于等于partition数量

3、主题(Topic)

        Kafka 中的消息以主题为单位进行归类,生产者负责将消息发送到特定的主题(发送到 Kafka 集群中的每一条消息都要指定一个主题),而消费者负责订阅主题并进行消费。

        主题是一个逻辑上的概念,它还可以细分为多个分区,

4、分区(Partition)

        一个分区只属于单个主题,很多时候也会把分区称为主题分区(Topic-Partition)。同一主题下的不同分区包含的消息是不同的,分区在存储层面可以看作一个可追加的日志(Log)文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。

offset 是消息在分区中的唯一标识,Kafka 通过它来保证消息在分区内的顺序性,不过 offset 并不跨越分区,也就是说,Kafka 保证的是分区有序而不是主题有序

5、副本(replica)   ---AR  ----ISR  ----OSR

Kafka 为分区引入了多副本(Replica)机制,通过增加副本数量可以提升容灾能力。

同一分区的不同副本中保存的是相同的消息(在同一时刻,副本之间并非完全一样),副本之间是“一主多从”的关系,其中 leader 副本负责处理读写请求,follower 副本只负责与 leader 副本的消息同步。副本处于不同的 broker 中,当 leader 副本出现故障时,从 follower 副本中重新选举新的 leader 副本对外提供服务。Kafka 通过多副本机制实现了故障的自动转移,当 Kafka 集群中某个 broker 失效时仍然能保证服务可用。

ISR

Kafka 为每个主题维护了一组同步副本集合in-sync replicas(其中包含 leader 副本)。
只有被 ISR 中的所有副本都接收到的那部分生产者写入的消息才对消费者可见,这意味着 ISR 中的所有副本都会与 leader 保持同步状态。
为了避免出现新 leader 数据不完整导致分区数据丢失的情况,只有 ISR 中 follower 副本才有资格被选举为 leader。
 

OSR

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

6、leader  follower

以下三张图皆体现的多分区多副本的leader\follower

生产者和消费者只与 leader 副本进行交互,而 follower 副本只负责消息的同步,很多时候 follower 副本中的消息相对 leader 副本而言会有一定的滞后。

7、消费者组

组内的消费者共享一个topic

组内一个消费者、消息多分区:一个消费者一起消费当前topic的所有分区

组内多个消费者、消息多分区:多个消费者一起消费当前topic的所有分区(根据分配原则)

组内多个消费者、消息单分区:多个消费者一起消费当前topic的所有消息

组内一个消费者、消息单分区:一个消费者消费当前topic的所有消息、并且永远有序

相关文章:

  • Springboot-自定义Spring Boot Starter并推送到远端公服
  • 《奔跑吧,程序员:从零开始打造产品、技术和团队》 读书笔记
  • PHP - 各版本对比 - 整理
  • JAVA 常见算法(选择排序,二分查找)
  • 【dotnet】Unity IL2CPP Mono
  • HC32L110(五) Ubuntu20.04 VSCode的Debug环境配置
  • 牛客 NC24307 [USACO 2012 Dec S]Milk Routing
  • . Flume面试题
  • 来了 Android开发中高级进阶通关全文档
  • CONTINUOUS CONTROL WITH DEEP REINFORCEMENT LEARNING
  • 【Dubbo】入门搭建
  • 理解红黑树
  • 【精通内核】CPU控制并发原理CPU中断控制
  • 牛客 NC208246 胖胖的牛牛
  • 源码安装nginx及其配置
  • Fastjson的基本使用方法大全
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • opencv python Meanshift 和 Camshift
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • React Native移动开发实战-3-实现页面间的数据传递
  • Spring-boot 启动时碰到的错误
  • Sublime Text 2/3 绑定Eclipse快捷键
  • vue-router的history模式发布配置
  • 机器学习中为什么要做归一化normalization
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 那些年我们用过的显示性能指标
  • 区块链共识机制优缺点对比都是什么
  • 十年未变!安全,谁之责?(下)
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (42)STM32——LCD显示屏实验笔记
  • (C)一些题4
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (剑指Offer)面试题34:丑数
  • (利用IDEA+Maven)定制属于自己的jar包
  • (六)Hibernate的二级缓存
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • *Django中的Ajax 纯js的书写样式1
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET开发不可不知、不可不用的辅助类(一)
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @EnableAsync和@Async开始异步任务支持
  • @Mapper作用
  • @selector(..)警告提示
  • [ 数据结构 - C++] AVL树原理及实现
  • [Angular] 笔记 6:ngStyle
  • [ARC066F]Contest with Drinks Hard
  • [BZOJ1053][HAOI2007]反素数ant
  • [C++]Leetcode17电话号码的字母组合
  • [Contest20180313]灵大会议