ApacheKafka中的每个主题都是一个独立的队列,还是只有一个队列包含所有主题,或者大量主题分布在数量较少的队列上?换句话说, is 1 Topic = 1 Queue ?或者,Kafka如何在内部维护每个主题?
is 1 Topic = 1 Queue
50few1ms1#
在kafka中,每个主题都是一个单一的逻辑分布式提交日志(即一个仅附加的文件)。每个主题都被划分成若干个分区,这些分区分布在集群中。分区的数量可以动态增加。分区物理上存储在文件系统中。分区必须完全适合一个代理(kafka集群中的机器)。此外,您可以在一个代理上拥有同一主题的多个分区。然后将分区本身分割成若干段文件(默认段大小为1gb)为了说明这一点,您可以创建如下主题:创建新主题“test”
$ > ./kafka-topics --create --topic test --replication-factor 1 --partitions 3 --zookeeper localhost:2181 Created topic "test".
列出kafka分区(每个分区一个文件夹)
$ > ls /tmp/kafka-logs | grep test test-0 test-1 test-2
列出每个分区的段文件
$ > ls -sh /tmp/kafka-logs/test* /tmp/kafka-logs/test-0: total 0 0 00000000000000000000.index 0 00000000000000000000.log /tmp/kafka-logs/test-1: total 4,0K 0 00000000000000000000.index 4,0K 00000000000000000000.log /tmp/kafka-logs/test-2: total 4,0K 0 00000000000000000000.index 4,0K 00000000000000000000.log
8yoxcaq72#
主题有分区。每个分区都是一个队列。每个分区中的项按顺序处理。发布到主题并根据分区逻辑将消息发布到分区。默认情况下,使用循环分布,但可以配置。
2条答案
按热度按时间50few1ms1#
在kafka中,每个主题都是一个单一的逻辑分布式提交日志(即一个仅附加的文件)。
每个主题都被划分成若干个分区,这些分区分布在集群中。分区的数量可以动态增加。
分区物理上存储在文件系统中。分区必须完全适合一个代理(kafka集群中的机器)。
此外,您可以在一个代理上拥有同一主题的多个分区。
然后将分区本身分割成若干段文件(默认段大小为1gb)
为了说明这一点,您可以创建如下主题:
创建新主题“test”
列出kafka分区(每个分区一个文件夹)
列出每个分区的段文件
8yoxcaq72#
主题有分区。每个分区都是一个队列。每个分区中的项按顺序处理。发布到主题并根据分区逻辑将消息发布到分区。默认情况下,使用循环分布,但可以配置。