kafka入门须知

203 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 8 天,点击查看活动详情

对于kafka初学者的我来说仅仅也是听说过没见过。但是相比于flink,kafka的出场率明显要高一点,很多java项目中也开始拥抱kafka了。这里记录下我这个kafka初学者入门的一些领会收获。

Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的消息队列,可以处理大量的数据,并使您能够将消息从一个端点传递到另一个端点。 Kafka适合离线和在线消息消费。 Kafka消息保留在磁盘上,并在集群内复制以防止数据丢失。

一、基础概念

1.消息

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

2.消息系统

消息系统负责将数据从一个应用程序传输到另一个应用程序,因此应用程序可以专注于数据,但不担心如何共享它。分布式消息传递基于可靠消息队列的概念。消息在客户端应用程序和消息传递系统之间异步排队。有两种多类型的消息模式可用-一种是点对点,另一种是发布-订阅(pub-sub)消息系统。大多数消息模式遵循pub-sub。

3.批次

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

4.主题

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

5.分区

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

6.生产者

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

7.消费者

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

8.消费者群组

生产者与消费者的关系就如同餐厅中的厨师和顾客之间的关系一样,一个厨师对应多个顾客,也就是一个生产者对应多个消费者,消费者群组(Consumer Group)指的就是由一个或多个消费者组成的群体。

9.偏移量

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

10.broker

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

11.broker 集群

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

12.副本

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

13.重平衡:Rebalance。

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

二、kafka理解要点

  1. kafka 是一个基于发布-订阅的分布式消息系统(消息队列)
  2. Kafka 面向大数据,消息保存在主题(topic)中,而每个 topic 又分为多个分区(partition)
  3. kafka 的消息数据保存在磁盘,每个 partition 对应磁盘上的一个文件,消息写入就是简单的文件追加,文件可以在集群内复制备份以防丢失
  4. 即使消息被消费,kafka 也不会立即删除该消息,可以通过配置使得过一段时间后自动删除以释放磁盘空间
  5. kafka依赖分布式协调服务Zookeeper,适合离线/在线信息的消费,与 storm、spark和flink 等实时流式数据分析常常结合使用

三、kafka基本原理

整体数据流程图

image.png

1.数据生产过程

生产者写入的记录可以指定四个参数:topic-主题或消息分类,partition-分区,key-键,value-值。

其中 topic 和 value(要写入的数据)是必须要指定的,而 key 和 partition 是可选的。

对于一条记录,先对其进行序列化,然后按照 Topic 和 Partition 放进对应的发送队列中。如果 Partition 没有指定,在 Key 存在的情况下,按照 Key 进行哈希,相同 Key 去一个 Partition。如果 Key 不存在的情况,Round-Robin(轮询调度) 来选 Partition。

Apache Kafka 基础_w3cschool