[kafka]常见术语

简介: [kafka]常见术语

前言

kafka属于分布式的消息引擎系统,主要功能是提供一套完备的消息发布与订阅解决方案。

消息和批次

  • kafka 的数据单元被称为消息。消息由字节数组组成,对kafka来说,消息里的数据没有特殊的格式或含义。消息可以有一个可选的元数据,也就是。键也是一个字节数组,与消息一样,对kafka来说没有特殊含义。当需要以一种可控的方式将消息写入不同的分区时,需要用到键。最简单的例子就是为键生成一个一致性哈希值,然后用哈希值对主题分区数进行取模,为消息选取分区。这样可以保证具有相同键的消息总是会被写到相同的分区中(前提是分区数量没有发生变化)。
  • 为了提高效率,消息会被分成批次写入 Kafka。批次包含了一组属于同一个主题和分区的消息。

主题和分区

  • 在kafka中,发布订阅的对象是Topic(主题),可以为每个业务、每个应用甚至每类数据都创建专属的主题。
  • 主题可以被分为若干个分区,一个分区就是一个提交日志。消息会以追加的方式被写入分区,然后按照先入先出的顺序读取。
  • 由于一个主题一般包含几个分区,因此无法在整个主体范围内保证消息的顺序,但可以保证消息在单个分区内是有序的。

  • kafka使用消息日志(Log)来保存数据,一个日志就是硬盘上一个只能追加写(Append Only)消息的物理文件。因为只能追加下,因此避免了缓慢的随机IO操作,改为性能较好的顺序写操作。
  • 一条日志被细分为多个日志段(LogSegment),消息被追加写到最新的日志段中。当写满一个日志段后,kafka自动切分出一个新的日志段,并封存老的日志段。
  • kafka在后台会定期检查老的日志段能否被删除。
  • kafka通过分区来实现数据的冗余和伸缩。分区可以分布在不同的服务器上,也就是说,一个主题可以横跨多台服务器,以此来提供比单台服务器更强的性能。
  • 分区可以被复制,相同分区的多个副本可以保存在多台服务器上,以防其中一台服务器发生故障。
  • 我们通常会使用这个词来描述kafka这类系统中的数据。

生产者和消费者

  • 向主题发布消息的客户端称为生产者,生产者通常持续不断地向一个或多个主题发送消息。默认情况下,生产者会把消息均衡地分布到主题的所有分区中。不过,在某些情况下,生产者会把消息直接写入指定的分区,这通常是通过消息键和分区器来实现的。
  • 分区器会为键生成一个哈希值,并将其映射到指定的分区,这样可以保证包含同一个键的消息被写入同一个分区。
  • 订阅主题读取消息的客户端被称为消费者
  • 生产者向分区写入消息,每条消息在分区中的位置信息由一个叫偏移量(Offset)的数据来表征。分区偏移量总是从0开始。消费者通过检查消息的偏移量来区分消息是否已读取。
  • 消费者组,指的是多个消费者实例共同组成一个组来消费一组主题。这组主题中的每个分区都只会被组内的一个消费者实例消费,其它消费者实例不能消费它。
  • 假设消费者组内的一个实例挂了,kafka会自动将Failed实例之前消费的数据转移给其它活着的消费者,此机制称为“重平衡”。

broker和集群

  • 一个单独的kafka服务端被称为broker。broker 会接收来自生产者的消息,为其设置偏移量,并提交到磁盘保存。broker 会为消费者提供服务,对读取分区的请求做出响应,并返回已经发布的消息。
  • 多个broker组成了集群。每个集群都有一个同时充当集群控制器角色的broker(自动从活动的集群成员中选举出来)。控制器负责管理工作,包括为broker分配分区和监控broker。
  • 备份(Replication)是把相同的数据拷贝到多台机器上,这些相同的数据称为副本(replica)。
  • kafka定义了两类副本:领导者副本(leader replica)和追随者副本(follower replica)。前者对外提供与客户端交互的服务,后者只被动同步领导者副本的数据,不提供与客户端交互的服务。生产者总是向领导者副本写消息,消费者总是从领导者副本读消息。追随者副本总是向领导者副本发送请求,领导者把消息同步给追随者。
  • 在集群中,一个分区从属于一个broker,这个broker被称为分区的领导者。一个被分配给其它broker的分区副本叫作这个分区的追随者。
  • 所有想要发布消息的生产者必须连接到领导者,但消费者可以从领导者或者追随者那里读取消息。

补充

  • kafka不只是一个消息引擎系统,也是一个流处理平台。
  • broker默认的消息保留策略是这样的:要么保留一段时间,要么保留消息总量达到一定的字节数。当消息数量达到这些上限时,就消息就会过期并被删除。主题可以设置自己的保留策略。我们可以把主题配置成紧凑型日志,只有最后一条带有特定键的消息会被保留下来。
  • kafka为多集群提供了一个叫作mirrormaker的工具,用于将一个集群的数据同步给另一个集群。

参考

  • 极客时间 - kafka核心技术与实战 - 胡夕
  • kafka权威指南
相关文章
|
存储 缓存 文件存储
如何保证分布式文件系统的数据一致性
分布式文件系统需要向上层应用提供透明的客户端缓存,从而缓解网络延时现象,更好地支持客户端性能水平扩展,同时也降低对文件服务器的访问压力。当考虑客户端缓存的时候,由于在客户端上引入了多个本地数据副本(Replica),就相应地需要提供客户端对数据访问的全局数据一致性。
32698 79
如何保证分布式文件系统的数据一致性
|
前端开发 容器
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局(上)
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局
17751 20
|
设计模式 存储 监控
设计模式(C++版)
看懂UML类图和时序图30分钟学会UML类图设计原则单一职责原则定义:单一职责原则,所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。bad case:IPhone类承担了协议管理(Dial、HangUp)、数据传送(Chat)。good case:里式替换原则定义:里氏代换原则(Liskov 
36682 19
设计模式(C++版)
|
存储 编译器 C语言
抽丝剥茧C语言(初阶 下)(下)
抽丝剥茧C语言(初阶 下)
|
机器学习/深度学习 人工智能 自然语言处理
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
24758 14
|
机器学习/深度学习 弹性计算 监控
重生之---我测阿里云U1实例(通用算力型)
阿里云产品全线降价的一力作,2023年4月阿里云推出新款通用算力型ECS云服务器Universal实例,该款服务器的真实表现如何?让我先测为敬!
36660 15
重生之---我测阿里云U1实例(通用算力型)
|
SQL 存储 弹性计算
Redis性能高30%,阿里云倚天ECS性能摸底和迁移实践
Redis在倚天ECS环境下与同规格的基于 x86 的 ECS 实例相比,Redis 部署在基于 Yitian 710 的 ECS 上可获得高达 30% 的吞吐量优势。成本方面基于倚天710的G8y实例售价比G7实例低23%,总性价比提高50%;按照相同算法,相对G8a,性价比为1.4倍左右。
|
存储 算法 Java
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的限流器RateLimiter功能服务
随着互联网的快速发展,越来越多的应用程序需要处理大量的请求。如果没有限制,这些请求可能会导致应用程序崩溃或变得不可用。因此,限流器是一种非常重要的技术,可以帮助应用程序控制请求的数量和速率,以保持稳定和可靠的运行。
29838 52

热门文章

最新文章

下一篇
开通oss服务