3k kafka 主题会降低性能吗?

Are 3k kafka topics decrease performance?

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

卡夫卡硬件

Startup-2 (2 CPU, 2 GB RAM, 90 GB storage, no backups) 3-node high availability set

后台

我的主题是:

建筑

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

意思是我把数据上传回kafka到一个topic,只包含一个特定实体的数据。

问题

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

  1. 我的kafka能搞定吗?如果不是,我需要更改什么?
  2. 我是否需要删除一个主题,或者随着时间的推移有(很多!!)未使用的主题没问题?
  3. 每个消费最终消息的consumer,会同时消费100个topic。我知道 kafka 客户端可以同时使用多个主题,但我不确定最佳实践是什么。
  4. 请分享您的疑虑。

要求

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

Apache Kafka 社区的 general recommendation 每个代理的分区数不超过 4,000 个(包括副本)。链接的 KIP 文章解释了如果违反限制可能会遇到的一些问题,如果主题有 3,000 个,那么这样做很容易,除非您为每个主题选择较低的分区数 and/or 复制因子。

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

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

通常情况下,集群上有未使用的主题是可以的,但请注意,集群管理所有这些分区的元数据仍然会对性能产生影响,并且某些操作仍然会比主题不存在时花费更长的时间完全没有。

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