学习自Kafka学习征途:基础概念与术语

为什么要学Kafka?

本篇会聚焦于Kafka的基础概念部分,带你理解Kafka的基本术语。

Kafka是什么?

Apache Kafka是一款开源的消息引擎系统
Kafka学习一-基础概念与术语 - 图1
根据维基百科的定义,消息引擎系统是一组规范。企业利用这组规范在不同系统之间传递语义准确的消息,实现松耦合的异步式数据传递。通俗来讲,就是系统 A 发送消息给消息引擎系统,系统 B 从消息引擎系统中读取 A 发送的消息。

Kafka支持的消息传输模式

消息引擎系统需要设定具体的传输协议,即用什么方法把消息传输出去。
常见的方法有两种:
(1)点对点模型
消费者主动拉取数据,消息收到后清除消息。
Kafka学习一-基础概念与术语 - 图2
(2)发布/订阅模型

  • 可以有多个topic主题(例如:浏览、点赞、收藏、评论等)
  • 消费者消费数据之后,不删除数据
  • 每个消费者相互独立,都可以消费到数据

Kafka学习一-基础概念与术语 - 图3
Kafka同时支持这两种消息引擎模型

Kafka支持的主要应用场景

为什么系统A不能直接发送消息给系统B,还要隔一个消息引擎呢?
答案是:
(1)“削峰填谷”。所谓的“削峰填谷”就是指缓冲上下游瞬时突发流量,使其更平滑。
Kafka学习一-基础概念与术语 - 图4
(2)解耦,即允许独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。
Kafka学习一-基础概念与术语 - 图5
(3)异步通信,即允许把一个消息放入队列,但并不立即处理它们,然后再需要的时候才去处理它们。
Kafka学习一-基础概念与术语 - 图6

Kafka基本术语

基础架构

一图胜千言,Kafka的基础架构如下图所示:
Kafka学习一-基础概念与术语 - 图7

三层消息架构

第一层:主题层
每个主题可以配置M个分区,而每个分区又可以配置多个副本。
第二层:分区层
每个分区的N个副本中只能有一个充当领导者角色,只由领导者对外提供服务;其他N-1个副本是追随者副本,只是提供数据冗余之用。
Kafka给topic做partition分区带来的好处:
(1)合理使用存储资源:每个Partition在一个Broker上存储,可以把海量的数据按照分区切割成一块块数据存储在多台Broker上,从而合理控制分区的任务,最终实现负载均衡的效果。
(2)提高并行度:生产者可以按分区为单位发送数据,消费者也可以按分区为单位消费数据。
Kafka学习一-基础概念与术语 - 图8
同时,配合partition的设计,Kafka提出了消费组的概念,多个消费者实例共同组成的一个组,组内每个消费者并行消费以实现高吞吐。但需要注意的是,每个partition只会由组内固定的一个消费者进行消费
Kafka学习一-基础概念与术语 - 图9
此外,为了提高可用性,Kafka为每个partition增加了若干个副本,类似于MongoDB的复制集Replication,但是和MongoDB不同的就是其副本follower制作冗余,不提供服务。只有等Leader挂掉之后,follower才有机会提供服务。
Kafka学习一-基础概念与术语 - 图10
最后,leader和follower的关系这类元数据存储在了zookeeper中。Kafka 2.8.0以后,也阔以选择配置不采用zookeeper。官方称这项功能为Kafka Raft元数据模式(KRaft)。在KRaft模式,过去由Kafka控制器和ZooKeeper所操作的元数据,将合并到一个新的Quorum控制器,并且在Kafka集群内部执行(拥抱了Raft协议)。
Kafka学习一-基础概念与术语 - 图11
第三层:消息层
分区中包含若干条消息,每条消息的位移从0开始,依次递增。
最后,客户端程序只能与分区的领导者副本进行交互。

具体名词术语

  • 消息:Record。Kafka 是消息引擎嘛,这里的消息就是指 Kafka 处理的主要对象。
  • 主题:Topic。主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。
  • 分区:Partition。一个有序不变的消息序列。每个主题下可以有多个分区。
  • 消息位移:Offset。表示分区中每条消息的位置信息,是一个单调递增且不变的值。
  • 副本:Replica。Kafka 中同一条消息能够被拷贝到多个地方以提供数据冗余,这些地方就是所谓的副本。副本还分为领导者副本和追随者副本,各自有不同的角色划分。副本是在分区层级下的,即每个分区可配置多个副本实现高可用。
  • 生产者:Producer。向主题发布新消息的应用程序。
  • 消费者:Consumer。从主题订阅新消息的应用程序。
  • 消费者位移:Consumer Offset。表征消费者消费进度,每个消费者都有自己的消费者位移。
  • 消费者组:Consumer Group。多个消费者实例共同组成的一个组,同时消费多个分区以实现高吞吐。
  • 重平衡:Rebalance。消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。Rebalance 是 Kafka 消费者端实现高可用的重要手段。

    Kafka不只是消息引擎

    Apache Kafka 是消息引擎系统,也是一个分布式流处理平台
    Kafka在设计之初就旨在提供三个方面的特性:
    (1)提供一套API实现生产者和消费者;
    (2)降低网络传输和磁盘存储开销;
    (3)实现高伸缩性架构;

    Kafka如何选择?

    目前市面上Kafka有如下几种:

  • Apache Kafka

  • Confluent Kafka
  • Cloudera/Hortonworks Kafka

    Apache Kafka

    开发人数最多、版本迭代速度最快的Kafka。
    如果我们仅仅需要一个消息引擎系统 抑或是 简单的流处理应用场景,同时需要对系统有较大的把控度,那么推荐使用Apache Kafka。

    Confluent Kafka

    目前分为免费版 和 企业版 两种,企业版提供了很多功能。最有用的当属跨数据中心备份 和 集群监控了。
    如果我们需要用到Kafka的一些高级特性,那么推荐使用Confluent Kafka。

    CDH/HDP Kafka

    提供了便捷化的操作界面,友好的监控功能,无需任何配置。
    如果我们需要快速地搭建消息引擎系统,或者需要搭建的是多框架构成的数据平台 且 Kafka只是其中一个组件,那么推荐使用云公司的Kafka。