1.KafKa基础概念

Kafka是什么?

Kafka是一款基于发布与订阅的消息系统,它一般称为“分布式提交日志”或者“分布式流平台”。文件系统或数据库提交日志用来提供所有事物的持久记录,通过重放这些日志可以重建系统的状态。同样地,Kafka的数据是按照一定顺序持久化保存的,可以按需读取。此外,Kafka的数据分布在正规系统里,具备数据姑丈保护和性能伸缩能力。

消息和批次

Kafka的数据单元被称为“消息”,相当于数据库表的一行记录。消息可以拥有一个可选的元数据,也就是键。通过键可以将消息写入不同的分区。

为了提高效率,消息可以分批次写入Kafka,批次就是一组消息,这些消息属于同一个主题和分区。

模式

对于Kafka来说,消息不过是晦涩难懂的字节数组,所有有人建议用一些额外的结构来定义消息的内容,让它们更易于理解。根据应用程序的需求,消息模式(schema)有许多可用的选项,像JSON和XML这些简单的系统不仅易用,而且可读性好。

主题和分区

Kafka的消息通过主题进行分类。主题就好比数据库的表,或者文件系统里面的文件夹。主题可以被分为诺干个分区,一个分区就是一个提交日志。消息以追加的方式写入分区,然后以陷入显出的顺序读取。一般一个主题包含几个分区,因此无法整个主题范围内保证消息的顺序,但可以保证消息在单个分区内的顺序。如下图所示的主题有四个分区,消息被追加写入每个分区的尾部。kafka通过分区来实现数据冗余和伸缩性。分区可以分布在不同的服务器上,也就是一个主题可以横跨多个服务器,一次来提供比单个服务器更大的性能。


1.KafKa基础概念


生产者和消费者

Kafka的客户端就是Kafka的系统的用户,它们被分为两种基本类型:生产者和消费者。除此之外,还有其他高级客户端API---用于数据继承的Kafka Connect API和用于流式处理的Kafka Streams。这些高级客户端API使用生产者和消费者作为内部组件,通过了高级功能。

生产者创建消息。在其他发布和订阅系统中,生产者可能被称为发布者或写入这。一般情况下,一个消息被发布到一个特定的主题上。生产者默认情况下把消息均衡地分不到主题的所有分区上,而并不关系特定消息会被写到哪个分区。不过,在某些情况下,生产者会把消息直接写到指定的分区。通常是通过消息键和分区器来实现的,分区器为键生成一个散列值,并将其映射到指定的分区上,这样可以保证包含同一个键的消息会被写到同一个分区上。生产者也可以使用自定义的分区器,根据不同的业务规则将消息映射到分区。

消费者读取消息。消费者订阅一个或多个主题,并按照消息生成的顺序读取它们。消费者通过检查消息的偏移量来区分已经读过的消息。偏移量是另一种元数据,它是一个不断递增的整数值,在创建消息时,Kafka会把它添加到消息里面,在给定的分区里,每个消息的偏移量都是唯一的。消费者把每个分区最后读取的消息偏移量保存在Zookeeper或Kafka上,如果消费者关闭或重启,它的读取状态不会丢失。 消费者是消费者群组的一部分,一个或多个消费者共同读取一个主题。群组保证每个分区只能被一个消费者使用。


1.KafKa基础概念


broker和集群

一个独立的Kafka服务器称为broker,broker接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。broker为消费者提供服务,对读取分区的请求作出相应,返回已经提交到磁盘上的消息。根据特定的硬件及其性能特征,单个broker可以轻松处理数千个分区以及每秒百万级的消息量。

broker是集群的组成部分。每个集群都有一个broker同时充当了集群控制器的角色(自动从集群的活跃成员中选举出来)。控制器负责管理工作,包括将分区分配给broker和监控broker。在集群中,一个分区从属于一个broker,该broker被称为分区的首领。一个分区可以分配多个broker,这个时候会发生分区复制。这种复制机制为分区提供了消息冗余,如果一个broker失效,其他broker可以接管领导权。不过,相关的消费者和生产者都要重新连接到新的首领。


1.KafKa基础概念


保留消息是Kafka的一个重要特性。Kafka broker默认的消息保留策略有两种。

  1. 保留一段固定的时间。比如7天
  2. 保留到消息达到一定大小的字节数,如1GB 当达到上限后,旧的消息会被过期删除。所以在任何时刻,可用消息的总量不会超过配置参数所指定的大小。

多集群

Kafka的消息复制机制只能在单个集群里面进行,不能在多个集群之间进行。Kafka提供了一个叫做MirrorMaker的工具,可以用它来实现集群间的消息复制。MirrorMaker的核心组件包含了一个生产者和一个消费者,两者通过一个队列相连。消费者从一个集群读取消息,生产者把消息发送到另一个集群。


1.KafKa基础概念


Kafka的优势

  1. 多个生产者:可以无缝地支持多个生产者,不管客户端在使用单个主题还是多个主题。
  2. 多个消费者:支持多个消费者从一个单独的消息流上读取数据,而且消费者之间互不影响。
  3. 基于磁盘的数据存储:支持消费者非实时地读取消息,由于消息被提交到磁盘,根据设置的规则进行保存。当消费者发生异常时候,意外离线,由于有持久化的数据保证,可以实现联机后从上次中断的地方继续处理消息。
  4. 伸缩性:用户在开发阶段可以先试用单个broker,再扩展到包含3个broker的小型开发集群,然后随着数据量不断增长,部署到生产环境的集群可能包含上百个broker。
  5. 高性能:Kafka可以轻松处理巨大的消息流,在处理大量数据的同事,它还能保证亚秒级的消息延迟。

数据生态系统

大数据生态系统


1.KafKa基础概念


使用场景

  1. 活动跟踪:比如统计网站用户与前端应用程序发生交互,前端应用生成用户活动的相关的消息。
  2. 传递消息:应用程序向用户发送通知(比如邮件)就是通过传递消息来实现的。
  3. 度量指标和日志记录:Kafka可以用于收集应用程序和系统度量指标以及日志。
  4. 提交日志。
  5. 流处理。