Kafka技术核心笔记(一)入门

259 阅读5分钟

一、Kafka术语

Kafka 是什么呢?用一句话概括一下:Apache Kafka 是一款开源的消息引擎系统

消息引擎系统是做什么用的呢?
消息引擎系统是一组规范。企业利用这组规范在不同系统之间传递语义准确的消息,实现松耦合的异步式数据传递。

Kafka术语

  • Broker:Kafka 的服务器端由被称为 Broker 的服务进程构成,即一个 Kafka 集群由多个 Broker 组成,Broker 负责接收和处理客户端发送过来的请求,以及对消息进行持久化。虽然多个 Broker 进程能够运行在同一台机器上,但更常见的做法是将不同的 Broker 分散运行在不同的机器上。这其实就是 Kafka 提供高可用的手段之一。
  • 消息:Record。这里的消息就是指 Kafka 处理的主要对象,使用的是纯二进制的字节序列
  • 主题:Topic。主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。
  • 分区:Partition。一个有序不变的消息序列。Kafka 中的分区机制指的是将每个主题划分成多个分区,每个分区是一组有序的消息日志。生产者生产的每条消息只会被发送到一个分区中。
  • 消息位移:Offset。表示分区中每条消息的位置信息,是一个单调递增且不变的值,从0开始。
  • 副本:Replica。Kafka 中同一条消息能够被拷贝到多个地方以提供数据冗余,这些地方就是所谓的副本。副本还分为领导者副本和追随者副本,前者对外提供服务,这里的对外指的是与客户端程序进行交互;而后者只是被动地追随领导者副本而已,不能与外界进行交互。副本是在分区层级下的,即每个分区可配置多个副本实现高可用。
  • 生产者:Producer。向主题发布新消息的应用程序。
  • 消费者:Consumer。从主题订阅新消息的应用程序。生产者和消费者都能够同时订阅多个主题的消息
  • 消费者位移:Consumer Offset。表征消费者消费进度,每个消费者都有自己的消费者位移。这和上面所说的消息位移完全不是一个概念。上面的“位移”表征的是分区内的消息位置,即一旦消息被成功写入到一个分区上,它的位移值就是固定的了
  • 消费者组:Consumer Group。多个消费者实例共同组成的一个组,同时消费多个分区以实现高吞吐。在 Kafka 中实现点对点模型的方法就是引入了消费者组。多个消费者实例共同组成一个组来消费一组 topic。这组主题中的每个分区都只会被组内的一个消费者实例消费,其他消费者实例不能消费它。
  • 重平衡:Rebalance。消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。Rebalance 是 Kafka 消费者端实现高可用的重要手段。
  • 消息日志:Log,Kafka 使用消息日志(Log)来保存数据,一个日志就是磁盘上一个只能追加写(Append-only)消息的物理文件。因为只能追加写入,故避免了缓慢的随机 I/O 操作,改为性能较好的顺序 I/O 写操作,这也是实现 Kafka 高吞吐量特性的一个重要手段。不过如果你不停地向一个日志写入消息,最终也会耗尽所有的磁盘空间,因此 Kafka 必然要定期地删除消息以回收磁盘。怎么删除呢?简单来说就是通过日志段(Log Segment)机制。在 Kafka 底层,一个日志又近一步细分成多个日志段,消息被追加写到当前最新的日志段中,当写满了一个日志段后,Kafka 会自动切分出一个新的日志段,并将老的日志段封存起来。Kafka 在后台还有定时任务会定期地检查老的日志段是否能够被删除,从而实现回收磁盘空间的目的。

二、Kafka是什么

Apache Kafka 是消息引擎系统,也是一个分布式流处理平台(Distributed Streaming Platform)

Kafka 在设计之初就旨在提供三个方面的特性:

  1. 提供一套 API 实现生产者和消费者;
  2. 降低网络传输和磁盘存储开销;
  3. 实现高伸缩性架构。

有几种 Kafka?

  1. Apache Kafka
    它是开发人数最多、版本迭代速度最快的 Kafka。但是 Apache Kafka 的劣势在于它仅仅提供最最基础的组件,特别是对于前面提到的 Kafka Connect 而言,社区版 Kafka 只提供一种连接器,即读写磁盘文件的连接器,而没有与其他外部系统交互的连接器,在实际使用过程中需要自行编写代码实现,这是它的一个劣势。另外 Apache Kafka 没有提供任何监控框架或工具。显然在线上环境不加监控肯定是不可行的,你必然需要借助第三方的监控框架实现对 Kafka 的监控。好消息是目前有一些开源的监控框架可以帮助用于监控 Kafka(比如 Kafka manager)。

  2. Confluent Kafka

  3. Cloudera/Hortonworks Kafka

Kafka 版本演进

Kafka 目前总共演进了 7 个大版本,分别是 0.7、0.8、0.9、0.10、0.11、1.0 和 2.0,其中的小版本和 Patch 版本很多。

0.10.0.0 是里程碑式的大版本,因为该版本引入了 Kafka Streams

在 2017 年 6 月,社区发布了 0.11.0.0 版本,引入了两个重量级的功能变更:一个是提供幂等性 Producer API 以及事务(Transaction) API;另一个是对 Kafka 消息格式做了重构