0

我有一个 Kafka 集群(在 AWS 上使用 Aivan):

卡夫卡硬件

Startup-2 (2 CPU, 2 GB RAM, 90 GB storage, no backups) 3-node high availability set
  • 我的消费者和 Kafka Broker 之间的 Ping 是 0.7 毫秒。

后群

我有一个这样的话题:

  • 它包含大约 3000 个实体的数据。
  • 实体生命周期为一周。
  • 每周将有不同的 3000 个实体(平均)。
  • 每个实体总共可能有 15k 到 50k 条消息。
  • 每秒最多可以有 500 条消息。
建筑学

我的团队构建了一个架构,这样会有一组消费者。他们将解析这些数据,执行一些转换(没有任何过滤!!),然后将最终消息发送回 kafka 到topic=<entity-id>.

这意味着我将数据上传回 kafka 到仅包含特定实体数据的主题。

问题

在任何给定时间,kafka 中最多可以有 3-4k 个主题(每个唯一实体 1 个主题)。

  1. 我的卡夫卡能处理好吗?如果不是,我需要改变什么?
  2. 我是否需要删除一个主题,或者随着时间的推移有(很多!!)未使用的主题是可以的?
  3. 每个消费最终消息的消费者将同时消费 100 个主题。我知道 kafka 客户可以同时使用多个主题,但我不确定最佳实践是什么。
  4. 请分享您的担忧。

要求

  • 请关注这个架构的潜在问题,尽量不要谈论替代架构(更少的话题,更多的消费者等)。
4

1 回答 1

3

主题的数量本身并不重要,但每个 Kafka 主题都是分区的,分区的总数可能会影响性能。

Apache Kafka 社区的一般建议是每个代理不超过 4,000 个分区(这包括副本)。链接的 KIP 文章解释了如果超出限制可能会遇到的一些问题,并且使用 3,000 个主题很容易做到这一点,除非您为每个主题选择较低的分区数和/或复制因子。

为主题选择较低的分区数有时并不是一个好主意,因为它会限制读取和写入的并行性,从而导致客户端的性能瓶颈。

为主题选择低复制因子有时也不是一个好主意,因为它会增加失败时数据丢失的机会。

一般来说,集群上有未使用的主题是可以的,但请注意,集群管理所有这些分区的元数据仍然会影响性能,并且某些操作仍然需要比主题不存在时更长的时间。

每个集群也有一个限制,但要高得多(200,000 个分区)。因此,只需增加集群的节点数,您的架构可能会得到更好的服务。

于 2021-08-18T15:31:43.457 回答