cwa*_*ing 4 architecture apache-kafka event-stream-processing
在设计流处理管道时,如果我有许多主题,这些主题至少有一个分区,但可能没有数据进入其中,可能会产生什么成本?
举个例子,对于一个消费者,我可以选择一个“大型主题”,其中包含所有数据和许多分区,或者我可以选择将该数据(按租户、帐户或用户等)拆分为许多主题,默认情况下,单个分区。我对第二种情况的担心是,会有很多主题/分区看不到数据。那么,这个未使用的分区是否会产生任何成本,或者未使用的主题是否会产生任何成本。
H.Ç*_*Ç.T 10
首先,一个胖主题和许多分区与多个主题包含几个分区之间没有区别。主题只是为了事件之间的逻辑区分。Kafka 只关心分区的数量。
其次,拥有大量分区可能会导致一些问题:
每个分区都映射到代理中文件系统中的一个目录。在该日志目录中,每个日志段将有两个文件(一个用于索引,另一个用于实际数据)。
代理为它们复制的每个分区分配一个大小为replica.fetch.max.bytes 的缓冲区。如果replica.fetch.max.bytes设置为1 MiB,并且您有1000个分区,则需要大约1 GiB RAM。
如果作为控制器的代理发生故障,则 Zookeeper 将选举另一个代理作为控制器。此时,新当选的代理应在初始化期间从 Zookeeper 读取每个分区的元数据。
例如,如果 Kafka 集群中有 10,000 个分区,并且每个分区从 ZooKeeper 初始化元数据需要 2 毫秒,这可能会使不可用窗口再增加 20 秒。
您可以从以下链接获取更多信息:
https://www.confluence.io/blog/how-choose-number-topics-partitions-kafka-cluster/
https://docs.cloudera.com/documentation/kafka/latest /topics/kafka_performance.html