首页 > 其他分享 >Kafka基础概念

Kafka基础概念

时间:2022-08-29 17:24:58浏览次数:89  
标签:分区 partition 基础 Broker Kafka 概念 消息 offset

参考文献

基本概念这里
理解分区 Partition
offset 理解


基本概念

  • Topic
    • 是一个逻辑概念,相当于给消息分配的标签
  • Partition
    • 分区,topic 中的消息被分割为一个或多个的 partition,是一个物理概念
    • 对应到系统上就是若干个目录,一个分区就是一个日志文件
    • 消息以追加(append)的形式写入分区,先后以顺序的方式读取
    • 每个日志文件都是一个log entry序列。这个log entry并非由一个文件构成,而是分成多个segment
  • Segment
    • 段,将 Partition 进一步细分为若干个 segment,每个 segment 文件的大小相等
    • 每个segment以该segment第一条消息的offset命名并以.kafka为后缀
    • 另外会有一个索引文件,它标明了每个segment下包含的log entry的offset范围

因为每条消息都被append到该Partition中,属于顺序写磁盘,因此效率非常高
(顺序写磁盘效率比随机写内存还要高,这是Kafka高吞吐率的一个很重要的保证),值得一提的是,kafka使用文件进行存储,并且采用操作系统的零拷贝技术,主要利用ChanneltransferTo方法。
image

  • Broker
    • Kafka 集群包含一个或多个服务器,每个 Kafka 中服务器被称为 broker。
    • Broker 接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。
    • Broker 为消费者提供服务,对读取分区的请求作出响应,返回已经提交到磁盘上的消息
  1. Broker 是集群的组成部分,每个集群中都有一个 Broker 同时充当了集群控制器 Leader的角色(选举产生;每个 Broker 都可能成为 Leader,功能包括将分区 partition 分配给 broker 和监控 broker)

  2. 集群中,一个分区从属于一个 Leader,但是一个分区可以分配给多个 Broker(非Leader),这时会发生分区复制
    (复制机制为分区提供了消息冗余,如果一个 broker 失效,那么其他活跃用户会重新选举一个 Leader 接管)
    image

  • Producer
    • 消息的发布者,会将某 topic 的消息发布到相应的 partition 中。
    • 默认情况下把消息均衡地分布到主题的所有分区上,而并不关心特定消息会被写到哪个分区。
    • 某些情况下,生产者会把消息直接写到指定的分区
  • Consumer
    • 消费者,一个消费者可以消费多个 topic 的消息
    • 对于某一个 topic 的消息,其只会消费同一个 partition 中的消息
      image

同一Topic的一条消息只能被同一个Consumer Group内的一个Consumer消费;
但多个Consumer Group可同时消费这一消息
单播:所有的Consumer在同一个Group里
广播:只要每个Consumer有一个独立的Group就可以

image

  • offset

kafka会将生产的消息 append 到不太的 partition 中(即分区),每个分区都是有序且顺序不可变的记录集,分区中每一个记录都会分配一个 id 号来表示顺序,称之为 offset,offset 用来唯一标识区分分区中的每一条记录。消息的被读状态是由 consumer 来维护的,所以每个partition中offset一般都是连续递增的(如果开启了压缩,因为对旧数据的merge会导致不连续)被读取的消息并不会删除,所以每次都是追加写入顺序读写,具备很好的吞吐量。

  1. offset 有什么作用
    消费者在消费数据时,发生宕机后,再次重新启动后,消费的数据需要从宕机位置开始读取
  • 如果从头读取, 有一部分消息一定出现了重复消费
  • 如果从宕机时的消费位置读取, 就不会出现重复消费
  • 因此kafka设计了offset 可以用于处理这种情况
  1. 如何维护 offset 的值
  • 自动提交,设置enable.auto.commit=true,更新的频率根据参数【auto.commit.interval.ms】来定。这种方式也被称为【at most once】,fetch到消息后就可以更新offset,无论是否消费成功。默认就是true
  • 手动提交,设置enable.auto.commit=false,这种方式称为【at least once】。fetch到消息后,等消费完成再调用方法【consumer.commitSync()】,手动更新offset;如果消费失败,则offset也不会更新,此条消息会被重复消费一次
  1. offset 实体在什么位置

0.9.0版本以前.这些数值维护在zookeeper中,但是zk不适合大量写入.后来做了改动
0.9.0 版本以后,数据维护在kafka的_consumer_offsets主题下.
内部结构包括
groupid:topicName_partition offset

Kafka

  1. Kafka 是分布式发布-订阅消息系统。在 Kafka 集群中,没有“中心主节点”的概念,集群中所有的服务器都是对等的,因此,可以在不做任何配置的情况下实现服务器的删除与添加,消息生产者和消费者也能够做到随意重启和机器的上下线

  2. 消息系统生产者和消费者部署关系
    image

  3. 消息系统架构
    image

标签:分区,partition,基础,Broker,Kafka,概念,消息,offset
From: https://www.cnblogs.com/limeiyang/p/16554374.html

相关文章

  • Linux快速入门(一)Linux基础知识
    我的环境:Ubuntu认识命令行命令行窗口:可以看到第一行guebiqing@ubuntu:~$。这一行中gubeiqing显示的是当前用户名,ubuntu是当前的主机名,~表示我门当前所在目录是用户家......
  • Linux快速入门(二)Linux基础操作
    绝对路径和相对路径Linux中绝对路径指从根目录开始,即/目录。相对路径是指相对于当前路径开始,即./目录,../表示上一级目录路径。pwdpwd命令用于查看当前所在目录。gub......
  • Apache Druid 数据摄取---本地数据和kafka流式数据
    Durid概述ApacheDruid是一个集时间序列数据库、数据仓库和全文检索系统特点于一体的分析性数据平台。本文将带你简单了解Druid的特性,使用场景,技术特点和架构。这将有助......
  • 01 - 快速体验 Spring Security 5.7.2 | 权限管理基础
    在前面SpringBoot2.7.2的系列文章中,已经创建了几个computer相关的接口,这些接口直接通过SpringDoc或POSTMAN就可以访问。例如:GEThttp://localhost:9099/compute......
  • springframework---基础Ioc入门案例
    1.整体的结构  2.学习的方向  3.控制反转(本身由自身去new对象,现在由外部来提供对象)  4.具体做法:首先在我们的pom.xml中导入包  然后刷新我们导入......
  • 20 行代码!带你快速构建基础文本搜索引擎 ⛵
    ......
  • Java 基础语法
    Java关键字下面列出了Java关键字。这些保留字不能用于常量、变量、和任何标识符的名称。类别关键字说明访问控制private私有的protected受保护的public......
  • 网络基础
    一、性能指标1Byte(字节)=8bit(比特)1Kb=1024Byte1Mb=1024Kb1Gb=1024Mb1Tb=1024Gb注意:表示数据量的时候1k=1024,表示速度或速率时1k=10001、速率:每秒传输100bit数......
  • 切片基础篇
    1.定义切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。切片是一个引用类型,它的内部结构包含地址、长度和......
  • Bootstrap基础介绍一
    前端框架Bootstrap该框架已经帮你写好了很多页面样式,你如果需要使用,只需要下载它对应文件,之后直接cv拷贝即可在使用Bootstrap的时候所有的页面样式都只需要你通过class来......