Apache Kafka主题:架构和分区
什么是卡夫卡主题?
Kafka主题本质上是一个命名的记录流。Kafka在日志中存储主题。但是,Apache Kafka中的主题日志分为几个分区。此外,Kafka将这些日志的分区分布在多个服务器或磁盘上。换句话说,我们可以说Kafka中的主题是类别,流名称或提要。
此外,我们可以说Apache Kafka中的主题是pub-sub样式的消息传递。此外, 在Kafka主题中可以有零到多个称为Kafka消费者群体的订户 。基本上,Kafka中的这些主题被分解为分区,以提高速度,可伸缩性和大小。
如何创建卡夫卡主题
首先,运行 kafka-topics.sh
并指定主题名称,复制因子和其他属性,以在Kafka中创建主题:
/bin/kafka-topics.sh --create \
--zookeeper <hostname>:<port> \
--topic <topic-name> \
--partitions <number-of-partitions> \
--replication -factor <number-of-replicating-servers>
现在,使用一个分区和一个副本,下面的示例创建一个名为“test1”的主题:
斌/ kafka-topics.sh --create \
--zookeeper localhost:2181 \
--replication -factor 1 \
--partitions 1 \
- 主题文字
进一步,运行list topic命令,查看主题:
> bin / kafka-topics.sh --list --zookeeper localhost:2181
TEST1
确保当应用程序尝试生成,使用或获取不存在的主题的元数据auto.create.topics.enable
时,该 属性设置为true时会自动创建主题。
卡夫卡主题分区
此外,Kafka将主题日志分成几个分区,如果**存在且循环,通常通过记录**。当**丢失时,记录存储在分区上(默认行为)。默认情况下,有助于确定Kafka Producer 将记录发送到哪个分区的 键是Record Key。
基本上,为了在生产者写入的许多服务器上扩展主题,Kafka使用分区。此外,为了促进并行消费者,Kafka使用分区。此外,在故障转移方面,Kafka可以将分区复制到多个Kafka Brokers。
Kafka主题日志分区的订购和基数
好吧,我们可以说,只有在一个分区中,Kafka确实维护了一个记录顺序,因为分区也是一个有序的,不可变的记录序列。并且,通过将分区用作结构化提交日志,Kafka会不断附加到分区。在分区中,所有记录都分配了一个顺序ID号,我们进一步称之为偏移量。该偏移量进一步标识分区内的每个记录位置。
此外,为了扩展到适合单个服务器的大小,Topic分区允许Kafka日志。虽然主题可以跨越许多服务器上托管的许多分区,但主题分区必须适合托管它的服务器。此外,Apache Kafka中的主题分区是并行的一个单元。这意味着在任何时候,分区只能由一个使用者组中的一个Kafka使用者处理。基本上,Kafka中的消费者只能在自己的进程或自己的线程中运行。尽管如此,如果消费者停止,Kafka会在同一个消费者群体中的剩余消费者之间传播分区。
Kafka主题分区复制
出于容错的目的,Kafka可以跨可配置数量的Kafka服务器执行分区复制。基本上,每个分区中都有一个领导服务器和一定数量的跟随服务器。此外,对于分区,领导者是处理所有读写请求的人。
但是,如果领导者去世,追随者会复制领导者并接管。此外,对于组内的并行消费者处理,Kafka还使用分区。
复制:Kafka分区领导者,追随者和ISR。
通过使用 ZooKeeper,Kafka选择一个代理的分区副本作为领导者。此外,我们可以说,对于分区,具有分区领导者的代理处理所有记录的读写。此外,对于追随者(节点/分区对)的领导者分区,Kafka复制了写入。
同步的跟随者就是我们所说的ISR(同步复制品)。尽管如此, 如果分区领导失败,Kafka会选择新的 ISR作为新的领导者。
Kafka架构:Kafka复制 - 复制到分区0
当分区的所有ISR写入其日志时,该记录被视为“已提交”。但是,我们只能读取来自使用者的已提交记录。