本文主要学习 Kafka 基础知识及其在实践中的使用,(入门级)随实践而更新~

背景

Kafka 是最初由 Linkedin 公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统。用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等。

架构

基本架构

术语

  • 消息(Message、Event、Record)

    Kafka 中的数据单元被称为消息,也被称为记录,可以把它看作数据库表中某一行的记录。

  • 批次

    为了提高效率, 消息会分批次写入 Kafka,批次就代指的是一组消息。

  • 主题(Topic)

    消息的种类称为 主题,可以说一个主题代表了一类消息。相当于是对消息进行分类。主题就像是数据库中的表。

  • 分区(partition)

    主题可以被分为若干个分区,同一个主题中的分区可以不在一个机器上,有可能会部署在多个机器上,由此来实现 kafka 的伸缩性,单一主题中的分区有序,但是无法保证主题中所有的分区有序。

  • 生产者(Producer)

    向主题发布消息的客户端应用程序称为生产者,生产者用于持续不断的向某个主题发送消息。

  • 消费者(Consumer)

    订阅主题消息的客户端程序称为消费者,消费者用于处理生产者产生的消息。

  • 消费者群组

    消费者群组(Consumer Group)指的就是由一个或多个消费者组成的群体。

  • 偏移量

    偏移量(Consumer Offset)是一种元数据,它是一个不断递增的整数值,用来记录消费者发生重平衡时的位置,以便用来恢复数据。

  • broker

    一个独立的 Kafka 服务器就被称为 broker,broker 接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。

  • broker 集群

    broker 是集群 的组成部分,broker 集群由一个或多个 broker 组成,每个集群都有一个 broker 同时充当了集群控制器的角色(自动从集群的活跃成员中选举出来)。

  • 副本(Replica)

    Kafka 中消息的备份又叫做 副本,副本的数量是可以配置的,Kafka 定义了两类副本:领导者副本(Leader Replica)和追随者副本(Follower Replica),前者对外提供服务,后者只是被动跟随。

  • 重平衡(Rebalance)

    消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。Rebalance 是 Kafka 消费者端实现高可用的重要手段。

特性

  • 高吞吐、低延迟

    kakfa 最大的特点就是收发消息非常快,kafka 每秒可以处理几十万条消息,它的最低延迟只有几毫秒。

  • 高伸缩性

    每个主题(topic) 包含多个分区(partition),主题中的分区可以分布在不同的主机(broker)中。

  • 持久性、可靠性

    Kafka 能够允许数据的持久化存储,消息被持久化到磁盘,并支持数据备份防止数据丢失,Kafka 底层的数据存储是基于 Zookeeper 存储的,Zookeeper 我们知道它的数据能够持久存储。

  • 容错性

    允许集群中的节点失败,某个节点宕机,Kafka 集群能够正常工作。

  • 高并发

    支持数千个客户端同时读写。

原理