Kafka基础

基本概念
事件(Events)
事件代表过去发生的事实。事件是不可改变的,不会停留在一个地方。它们总是携带发生的状态变化从一个系统移动到另一个系统。
流(streams)
事件流表示系统业务活动中的相关事件。
主题(Topic)
当一个事件流进入 kafka,以 topic 持久化。在 kafka 中一个 topic 是一个物化的事件流。
Topics 组将相关的事件分组在一起,并持久化存储。kafka 中 topic 可以类比为数据库中的一张表或文件系统中的一个文件夹。
Topic 作为 Kafka 中的核心概念将生产者和消费者解耦。消费者从 kafka 主题中拉取消息,而生产者向 topic 推送消息。一个 topic 可以包含很多生产者和消费者。

分区(partition)
Kafka 的 topic 被分成多个分区。topic 在 kafka 中是一个逻辑概念,一个分区是最小的存储单元,存储一个主题中的消息的子集。每个分区都是一个日志文件,消息以只追加的方式写入其中。

分区副本
分区副本的作用?
生产者和消费者的请求都由 Leader 副本来处理。Follower 副本只负责消费 Leader 副本的数据和 Leader 保持同步。
副本分配的三个目标:
- 均衡地将副本分散于各个 broker 上
- 对于某个 broker 上分配的分区,它的其他副本在其他 broker 上
- 如果所有的 broker 都有机架信息,尽量将分区的各个副本分配到不同机架上的 broker。
在不考虑机架信息的情况下:
- 第一个副本分区通过轮询的方式挑选一个 broker,进行分配。该轮询从 broker 列表的随机位置进行轮询。
- 其余副本通过增加偏移进行分配。
考虑到机架信息,首先为每个机架创建一个 broker 列表。通过简单的轮询将分区分配给不同机架上的 broker。
偏移量(Offsets)和消息的排序
分区中的每条记录都被分配一个名为偏移量(offset)的顺序标识符,该标识符对应分区中的每条记录都是唯一的。
偏移量(offset)是一个递增的、不可变的数字,由 Kafka 维护。当记录被写入分区时,它被追加到日志的末尾,并分配下一个顺序偏移量。当用户从分区读取记录时,偏移量特别有用。我们稍后会讲到。下图显示了一个包含三个分区的主题。记录被追加到每个分区的末尾。

Offset 是消息在分区中的唯一标识,Kafka 通过它来保证消息在分区内的顺序性,不过Offset 并不跨越分区,也就是说,Kafka 保证的是分区有序性而不是主题有序性。
消费者组
对应分区,产生消费者组的概念
在 kafka 中,某些 Topic 的主题拥有数百万甚至数千万的消息量,如果仅仅靠个消费者进程消费,那么消费速度会非常慢,所以我们需要使用使用 kafka 提供的消费组功能,同一个消费组的多个消费者就能分布到多个物理机器上以加速消费
每个消费者组都会有一个独一无二的消费者组 id 来标记自己。每一个消费者 group 可能有一个或者多个消费者,对于当前消费组来说,topic 中每条数据只要被消费组内任何一个消费者消费一次,那么这条数据就可以认定被当前消费组消费成功。
kafka 的消费组有如下三个特征:
- 每个消费组有一个或者多个消费者
- 每个消费组拥有一个唯一性的标识 id
- 消费组在消费 topic 的时候,topic 的每个 partition 只能分配给一个消费者
基本命令
Topic命令

查看Topic列表
bin/kafka-topics.sh --bootstrap-server 175.24.172.159:7082 --list
查看Topic的详细信息
bin/kafka-topics.sh --bootstrap-server 175.24.172.159:7082 --topic testTopic --describe

创建Topic
bin/kafka-topics.sh --bootstrap-server 175.24.172.159:7082 --topic testTopic --create --partitions 3
- 可选配置:副本数量
--replication-factor N
删除Topic
bin/kafka-topics.sh --bootstrap-server 175.24.172.159:7082 --topic testTopic --delete
更改Topic信息
bin/kafka-topics.sh --bootstrap-server 175.24.172.159:7082 --topic testTopic --alter --partitions 4

生产者和消费者
创建生产者
bin/kafka-console-producer.sh --bootstrap-server 175.24.172.159:7082 --topic testTopic
创建消费者
消费消费者启动后产生的数据
bin/kafka-console-consumer.sh --bootstrap-server 175.24.172.159:7082 --topic testTopic
消费历史数据
bin/kafka-console-consumer.sh --bootstrap-server 175.24.172.159:7082 --topic testTopic --from-beginning
生产和消费数据
生产

消费


参考: