初探Kafka全局架构

​从今天将开始学习一个新的中间件Kafka,后面会对学习Kafka的整个内容写一系列的文章。这篇文章将会从以下三个方面进行总结:

  • Kafka是什么以及Kafka的使用场景
  • 端到端阐述Kafka的整个数据流转过程和全局架构
  • 阐述Kafka核心专有名词的具体含义

Kafka是什么?

官方定义Kafka是一个分布式流处理平台,并说明流处理平台应该具有以下三种特性:

  • 可以让你发布和订阅流式的记录。这一特性与消息队列或者企业消息系统类似。
  • 可以储存流式的记录,并且有较好的容错性。
  • 可以在流式记录产生时就进行处理。

但我更愿意定义Kafka是一款开源的消息引擎系统,很多时候也称为消息中间件。根据维基百科定义,消息引擎系统是一组规范,企业利用这组规范可以在不同系统之间传递语义准确的消息,来实现松耦合的异步式的数据传输

简单来说,就是系统A发送消息给消息引擎系统,系统B从消息引擎系统中读取系统A发送的消息(如下图所示)
消息引擎顶层图

通过引入消息引擎系统,可以有效的隔离上下游的业务,并对于突如其来的流量可以达到削峰填谷的效果,避免下游业务被打挂。所谓的削峰填谷,就是指缓冲上下游瞬时的突发流量,使流量变得更平滑,特别是对发送能力很强的上游,如果没有消息引擎的缓冲,处理能力慢的下游就可能会被突发的大流量压垮从而导致全链路的服务发生雪崩
鉴于以上设计,Kafka常用于以下两种大类别的场景:

  • 构造实时流数据管道。类似于消息队列,在系统或应用之间可靠地获取数据。
  • 构建实时流式应用程序。类似于流处理,对这些流数据进行转换或者影响。

Kafka的宏观架构

在了解Kafka是什么后,我们先从全局来看一下Kafka的整个数据走向(见下图)。
KAFKA顶层图

首先我们知道消息引擎系统主要是传输上下游系统发送的数据,为了避免单点问题和提高系统的性能和可用性,Kafka使用了集群的部署模式。其中集群每一台机器称为broker,往集群发送消息的一方称为生产者(Producer),从集群中获取消息的一方称为消费者(Consumer)

其次一个消息引擎需要在不同系统之间传输数据,那如何设计表达无歧义的数据格式就显得格外重要。常规的数据格式中有很多,如CSV、XML、JSON以及一些序列化框架(Google的ProtocolBuffer,Facebook的Thrift),但Kafka选择了最原始的字节序列作为消息传输的数据格式

除了数据格式之外,还需要设计具体的传输协议,常见的有以下两种模型,而Kafka同时支持这两种模型:

  • 点对点模型:也叫消息队列模型,即系统A发到消息引擎中的消息只能被系统B接收。
  • 发布/订阅模型:这种模型引入了主题(topic)的概念,其中发送方被称为发布者(Publisher),接收方称为订阅者(Subscribler)。这种模型可以有多个发布者同时发到这个主题,可以有多个订阅者接收到该主题的数据。生活中的报纸订阅就是这种模型。
    KAFKA架构图1

还有,在设计一个分布式系统时,我们需要考虑到可用性、可靠性、可扩展性、一致性和高性能等等因素,而Kafka是如何去做到这几方面的呢。

  • 可用性:除了通过集群提高kafka的高可用之外,kafka还提供了备份机制(Replication)来实现高可用。备份机制很简单,就是将相同的数据拷贝再存一份,在kafka中冗余的那份数据被称为副本(replica)其中副本还分为领导者副本(leader replica)和追随者副本(follower replica),领导者副本提供读写请求,追随者副本只会同步领导者副本的数据,不对外提供服务。

  • 可靠性:由副本机制、ACK和ISR等机制来保证数据的可靠性(ACK和ISR具体后面的文章会详细说明)

  • 可扩展性:当请求量大,当前集群无法承受这么大的请求时,可以通过横向扩容增加集群机器数量,分摊请求,而不需要客户端做任何修改。

  • 高性能:通过分区机制,并借助零拷贝、磁盘的顺序写入、日志格式和页缓存等技术(后面会详细讲解)。Kafka的分区机制就是将每个topic划分为多个分区(Partition),topic是个逻辑概念,分区是物理概念,所以生产者和消费者都是针对分区进行生产和消费的。

  • 一致性:通过High Watermark和leader Epoch等机制保证数据的一致性
    KAFKA架构2

Kafka专有名词

根据上述Kafka的整个宏观架构,我们知道Kafka主要涉及到以下几个专有术语:

  • 主题:被生产者发布订阅的对象称为主题(topic),我们可以给每个业务或应用去创建单独的主题。

  • 生产者:往Kafka集群发送消息的客户端称为生产者(Producer),生产者可以往一个或多个topic发送消息。

  • 消费者:往Kafka集群读取消息的客户端称为消费者(Consumer),消费者可以同时订阅多个topic的数据。

  • broker:Kafka集群中每一台节点称为broker,准确来说是一台机器上启动的Kafka进程称为broker。主要负责接收和处理客户端的请求,并对消息进行持久化。

  • 分区:将topic划分为多个分区,其中每个分区来保存一组有序的消息日志,生产者生产的消息只会发送到一个分区中。通过将分区存储在不同的broker上,可以实现可伸缩性,从而避免副本中的数据过多导致broker无法容纳。

  • 副本:副本分为领导者副本和追随者副本,领导者副本负责接收客户端的请求,追随者副本向领导者副本同步数据。副本机制主要是对数据做冗余备份,实现Kafka的高可用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值