apache-kafka - 未使用的 Kafka 主题/分区的成本
问题描述
在设计流式处理管道时,如果我有许多主题,这些主题至少有一个分区但可能没有数据进入,那么可能会产生什么成本?
例如,对于一个消费者,我可以选择拥有一个包含所有数据和许多分区的“大型主题”,或者我可以选择将该数据(按租户、帐户或用户等)拆分为多个主题,默认情况下,单个分区。我对第二种情况的担心是会有很多主题/分区看不到数据。那么,这个未使用的分区是否会产生任何成本,或者未使用的主题是否不会产生任何成本。
解决方案
首先,一个胖主题和很多分区与一个以上包含几个分区的主题没有区别。主题只是为了在事件之间进行逻辑区分。Kafka 只关心分区的数量。
其次,有很多分区会导致一些问题:
- 打开的文件太多:
每个分区都映射到代理中文件系统中的一个目录。在该日志目录中,每个日志段将有两个文件(一个用于索引,另一个用于实际数据)。
- 更多的分区在代理和消费者端都需要更多的内存:
代理为它们复制的每个分区分配一个大小为replica.fetch.max.bytes 的缓冲区。如果 replica.fetch.max.bytes 设置为 1 MiB,并且您有 1000 个分区,则需要大约 1 GiB 的 RAM。
- 更多分区可能会增加不可用性:
如果作为控制器的代理出现故障,则 Zookeeper 会选择另一个代理作为控制器。At that point newly elected broker should read metadata for every partition from Zookeeper during initialization.
例如,如果 Kafka 集群中有 10,000 个分区,并且从 ZooKeeper 初始化元数据每个分区需要 2 毫秒,这可能会使不可用窗口增加 20 秒。
您可以从以下链接获得更多信息:
https ://www.confluent.io/blog/how-choose-number-topics-partitions-kafka-cluster/
https://docs.cloudera.com/documentation/kafka/latest /topics/kafka_performance.html
推荐阅读
- html - 100% 宽度的 Html div 看起来像是 100%,但实际上缺少一些像素
- javascript - 显示来自 DOM 树不同部分的元素旁边
- django - 姜戈 | 为什么要使用 {% load static %} 并使模板编译器工作得更多?
- python - FuncAnimation 不显示数据点
- spring-boot - 春季休息会议
- c# - C# - 以编程方式将表单垂直居中和固定水平居中的最佳方法是什么?
- asp.net - ASP.NET 使用 Button 而不是 FileUpload 来上传文件
- javascript - 当两个函数有一些相似之处时进行重构
- amazon-web-services - 如何为 AssumeRole 事件配置 AWS Cloudwatch 事件(以触发 SNS 通知)
- css - 使用可能的最小宽度