Kafka读书笔记 -- 初识Kafka

栏目: 后端 · 发布时间: 5年前

  1. Kafka一般被称为『分布式提交日志』或者『分布式流平台』
  2. 文件系统或数据库提交日志用来提供所有事务的持久记录,通过重放这些日志可以重建系统的状态
    • Kafka的数据是按照一定顺序持久化保存的,可以按需读取
  3. Kafka的数据分布在整个系统里,具备数据故障保护和性能伸缩能力

消息和批次

  1. Kafka的数据单元被称为消息
  2. 消息由 字节数组 组成,消息里的数据没有特别的格式或者含义
  3. 消息可以有一个可选的 元数据 ,就是键,键也是一个 字节数组 ,同样没有特殊含义
    • 消息以 一种可控的方式写入不同的分区 时,会用到键
    • 例如为键生成一个一致性散列值,然后使用散列值对主题分区数进行取模,为消息选取分区,从而保证具有相同键的消息总是被写入到相同的分区
  4. 为了提高效率,消息被 分批 写入Kafka, 批次就是一组消息 ,这些消息 属于同一个主题和分区
    • 如果每个消息都单独穿行于网络,会导致大量的网络开销,把消息分成批次传输可以减少网络开销
    • 不过,这需要在 时间延迟吞吐量 之间做出权衡:批次越大,单位时间内处理的消息就会越多,耽搁消息的传输时间就会越长
    • 批次数据会被 压缩 ,这样可以提升数据的传输和存储能力,但要做更多的计算处理

模式

  1. 对于Kafka来说,消息不过是晦涩难懂的字节数组
  2. 依据应用程序的需求, 消息模式 有许多可用的选项
  3. 像JSON和XML这些简单的系统,不仅易用,而且可读性好;但是 缺乏强类型的处理能力 ,不同版本之间的 兼容性也不好
  4. Kafka的许多开发者喜欢使用 Apache Avro ,它最初是为了Hadoop开发的一款序列化框架
    • Avro提供了一种 紧凑的序列化格式模式和消息体是分开的,当模式发生变化时,不需要重新生成代码
    • Avro还支持 强类型模式进化 ,其版本既向前兼容,也向后兼容
  5. 数据格式的一致性 对于Kafka来说很重要,它 消除了消息读写操作之间的耦合性
    • 如果读写操作紧密地耦合在一起,消息订阅者需要升级应用程序才能同时处理新旧两种数据格式
    • 在消息订阅者升级之后,消息发布者才能跟着升级,以便使用新的数据格式
    • 新的应用程序如果需要使用数据,就要和消息发布者发生耦合,导致开发者需要做很多繁杂的工作
  6. 定义良好的格式,并把它们存放在 公共仓库 ,可以方便我们理解 Kafka的消息结构

主题和分区

  1. Kafka的消息通过 主题 进行分类,主题类似于数据库的表,或者文件系统里的文件夹
  2. 主题可以被分为若干个分区,一个分区就是一个提交日志
  3. 消息以 追加 的方式写入分区,然后以 FIFO 的顺序读取
  4. 由于一个主题一般包含几个分区,因此 无法在整个主题范围内保证消息的顺序 ,但可以保证消息在单个分区内的顺序
  5. Kafka通过分区来实现 数据冗余伸缩性
    • 分区可以分布在不同的服务器上,因此一个主题可以横跨多个服务器
  6. 很多时候,会把一个 主题的数据 看成一个 ,不管它有多少个分区
    • 流是一组从生产者移动到消费者的数据

Kafka读书笔记 -- 初识Kafka

生产者和消费者

  1. 生产者 创建消息
    • 一般情况下,一个消息会被发布到特定的主题上
    • 默认情况下, 生产者把消息均匀地分布到主题的所有分区上 ,而并不关心特定消息会被写到哪个分区
    • 在特定情况下,生产者会把消息直接写到指定的分区,这通常听过 消息键分区器 来实现的
      • 分区器为键生成一个散列值,并将其映射(例如取模)到指定的分区上
      • 这样可以保证包含同一个键的消息会被写到同一个分区上
  2. 消费者 读取消息
    • 消费者 订阅一个或多个主题 ,并 按照消息生成的顺序读取 它们
    • 消费者通过检查消息的 偏移量 来区分已经读取过的消息
      • 偏移量是另一种 元数据 ,它是一个 不断递增 的整数值, 在创建消息时,Kafka会把偏移量添加到消息里
      • 在给定的分区里,每个消息的偏移量都是唯一的
      • 消费者把 每个分区最后读取的消息偏移量 保存在Zookeeper或Kafka上,如果消费者关闭或重启,它的读取状态不会丢失
    • 消费者是 消费者群组 的一部分,会有一个或者多个消费者共同读取一个主题
      • 群组保证每个分区只能被一个消费者使用
      • 消费者与分区之间的映射通常被称为 『消费者对分区的所有权关系』
      • 如果一个消费者失效,群组里的其它消费者可以接管失效消费者的工作

Kafka读书笔记 -- 初识Kafka

Broker和集群

  1. 一个 独立的Kafka服务器 被称为 Broker
  2. Broker接收来自生产者的消息, 为消息设置偏移量,并提交消息到磁盘保存
  3. Broker为消费者提供服务,对 读取分区的请求 作出响应,返回已经提交到磁盘上的消息
  4. Broker是集群的组成部分,每个集群都有一个Broker同时充当 集群控制器 的角色(自动从集群的活跃成员中选举出来)
    • 控制器负责管理工作: 将分区分配给Broker + 监控Broker
  5. 在集群中, 一个分区从属于一个Broker ,该Broker被称为 分区的首领
    • 一个分区可以分配给多个Broker,这个时候就会发生分区复制
    • 这种复制机制为分区提供了 消息冗余
  6. 如果有一个Broker失效,其它Broker可以接管领导权,相关的消费者和生产者都需要 重新连接 到新的首领

Kafka读书笔记 -- 初识Kafka

保留消息

  1. 保留消息是Kafka的一个重要特性
  2. 默认的消息保留策略
    • 要么保留 一段时间 ,要么保留到消息达到 一定大小的字节数
    • 当消息数量达到这些上限时,旧消息就会过期并被删除
  3. 主题 可以配置自己的保留策略,可以将消息保留到不再使用它们为止

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Node.js:来一打 C++ 扩展

Node.js:来一打 C++ 扩展

死月 / 电子工业出版社 / 2018-6-1 / 109

Node.js 作为近几年新兴的一种编程运行时,托 V8 引擎的福,在作为后端服务时有比较高的运行效率,在很多场景下对于我们的日常开发足够用了。不过,它还为开发者开了一个使用C++ 开发 Node.js 原生扩展的口子,让开发者进行项目开发时有了更多的选择。 《Node.js:来一打 C++ 扩展》以 Chrome V8 的知识作为基础,配合 GYP 的一些内容,将教会大家如何使用 Node......一起来看看 《Node.js:来一打 C++ 扩展》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具