这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战
之前相关的文章:认识 Apache Kafka | Apache Kafka 的本地安装
在深入了解 Kafka 之前,先了解常用的术语和概念,对之后的学习会有很大的帮助。本文简单介绍 Kafka 中常见的术语,适合刚开始接触 Kafka 的开发者。
消息 Message
消息系统最重要的主题无疑是消息本身,消息是 Kafka 主要处理的对象。最简单的消息系统处理流程就是:系统 A 将消息发送给 Kafka,系统 B 再从 Kafka 获取消息。
主题 Topic
在 Kafka 中,发送消息的系统 A 和获取消息的系统 B 在发送/获取消息的时候,都需要指定一个 Topic。Topic 是逻辑上的一个容器,我们可以在 Kafka 中创建若干个 Topic,然后根据业务和消息类型,将消息发送到不同的 Topic 当中。
生产者 Producer & 消费者 Consumer
以上例子中的系统 A 就扮演者生产者的角色,消息系统中的消息都是由生产者产生并且发送给 Kafka 中的指定 Topic;系统 B 扮演消费者的角色,从 Kafka 中特定的读取消息。
在 Kafka 中,生产者和消费者都属于客户端。
节点 Broker
一个 Broker 就是一个 Kafka 服务端进程。在生产环境下,通常会运行多个 Broker 组成一个 Kafka 集群,并且将每一个 Broker 都部署在不同的机器上,以提高系统的可用性。
分区 Partition
为了提高性能,在 Kafka 中,可以将一个 Topic 划分成多个 Partition,类似于分区、分片的概念。每一个 Partition 是一组有序的消息,同一个 Topic 的多个 Partition 可以存储在不同的 Broker 上。
Kafka 中的分区编号从 0 开始,生产者生产的每一个消息只能被发送到一个分区中。
消费者组 Consumer Group
为了实现高吞吐量,在 Kafka 中,可以让若干个消费者组成一个消费者组,共同消费同一个 Topic 下不同 Partition 的消息,以实现更高的吞吐量。
副本 Replica
Replica 是 Kafka 实现高可用另一个特性。每一个 Partition 可以有多个 Replica 副本,提供存储冗余。将每个 Partition 的多个副本保存在不同的 Broker 中,其中一个是 Leader Replica,其余为 Follower Replica。当一个 Broker 宕机后,如果造成了 Leader Replica 不可用,那么会从 Follower 中选举出一个新的 Leader。
生产者和消费者与 Partition 交互的时候,都只会与 Leader 交互,Follower 只充当数据副本的角色。当生产者发送一个消息后,只有当所有的 Replica 都收到消息并告知 Leader 之后,这个消息才能被消费者读取到。
消息位移 Offset
消费者在消费消息的过程中,记录消费者在分区中消费进度的字段,就是消息位移,它是一个偏移量,随着消费者不断消费分区中的消息而递增。
重平衡 Rebalance
当 Kafka 的某个主题的消费者组中,有一个消费者不可用后,其他消费者会自动重新分配订阅的主题分区,这个过程叫做 Rebalance,是 Kafka 实现消费者端高可用的重要手段。