每个应用程序的 Apache Kafka 主题
Posted
技术标签:
【中文标题】每个应用程序的 Apache Kafka 主题【英文标题】:Apache Kafka topic per application 【发布时间】:2021-09-09 19:32:19 【问题描述】:我正在尝试构建像 Ably 这样的 PaaS,我在其中为用户提供易于使用的发布/订阅系统。问题是我打算使用 Kafka,但我不知道它是否适合这个。每个用户可以在 PaaS 中拥有任意数量的应用程序,每个应用程序都会收到不同的消息,我认为 PaaS 中的每个应用程序都会在 Kafka 中有一个主题,但如果我得到应用程序的数量可能会增长到数百万甚至数十亿很多用户,而 Kafka 不适合这么多主题。
我应该为此使用 Kafka 还是研究其他东西?也许还有其他方法可以在我不知道的应用程序之间分离消息。我不能将所有内容都放在一个主题中,因为那样我会在节点上收到数万亿条不必要的消息。
【问题讨论】:
不清楚您正在生成什么事件。例如,一个App-Created
主题可以用于所有应用程序和所有用户,假设您有一些消费者为新的应用程序请求构建支持基础设施。同样,User-Signup
用于存储用户信息。您遇到的问题是信息返回给特定用户/应用程序,而不是针对他们。对于该用例,您需要特定的主题(甚至是集群,这可以通过 Confluent Cloud 或 MSK 轻松完成)
【参考方案1】:
对于您的 kafka 问题部分:
2021 年 3 月更新: 使用 Kafka 的新 KRaft 模式(“Kafka Raft 元数据模式”的缩写;在 Kafka v2.8 的早期访问中),它从 Kafka 的架构中完全移除了 ZooKeeper,一个 Kafka集群可以处理数百万个主题/分区。详情请见https://www.confluent.io/blog/kafka-without-zookeeper-a-sneak-peek/。
由于上述特性尚未推荐用于生产用途的架构当前限制是由 zookeeper 支持的 kafka 集群中的数千个主题/分区
如果您想为其他应用程序和客户提供一些服务,最好提供不同的主题,这样您就可以利用身份验证和授权机制来避免用户访问其他用户的数据。
【讨论】:
听到这真是太棒了,但是我的想法是,为了让我正在开发的 PaaS 通过使用每个应用程序的主题来正常工作,主题必须是“无限的”,以便我添加代理到集群中,我可以添加越来越多的主题。如果有设定的限制,那么 PaaS 将有一段时间停止工作,因为应用程序太多,无法创建更多主题。 没有硬性限制设置,我没有说有,这是性能和最佳实践的问题......如果我的回答理解错误,请见谅 我明白了,你的回答太棒了达到 X 个主题,一切都将停止正常工作”。我希望我错了,当我添加越来越多的经纪人时,当我拥有数百万个主题(使用 KRaft)时,kafka 仍然可以正常运行。【参考方案2】:免责声明:我工作干练并领导我们围绕 Kafka 开展的一些工作
首先,Ably 不是使用 Kafka 构建的,而 Kafka 非常像 unsuited to the task of a service like Ably,就像 Ably 没有做 Kafka 所做的一样。 Kafka 是一个非常强大的工具,拥有丰富的生态系统,但弹性可扩展性并不是它的问题。扩展主题/分区是一个缓慢的过程,将节点添加到正在运行的活动集群不是您可以“做”的事情。然而,他们确实如此,work great together
有更适合这种情况的流式解决方案,例如 Apache Pulsar 或 Redis (PubSub/Streams),但又一次需要权衡取舍。 Pulsar 在推送订阅方面做得更好,具有功能并且可以做更多事情。 Redis 集群可以弹性且快速地扩展。权衡是 Pulsar 的运行、管理和扩展非常复杂,而 Redis 默认情况下是短暂的。还有其他解决方案,例如 NATS
Ably 中有很多技术可以让各种集群扩展到数以千万计的连接和通道,而 maintaining strong guarantees 没有任何一个开箱即用的技术可以从单个开源供应商处获得。
如果你想使用 Kafka,Redpanda 可能是你应该开始的地方。当您尝试以相对简单的方式处理每条消息时,它们的内联 WASM 可能非常有用。 或者你可以使用 Ably ;)
【讨论】:
我从 Redis Pub/Sub 开始,但您不能使用集群,因为当您添加更多节点时它会减慢速度,尽管它们正在解决此问题的 v2 Pub/Sub。感谢您提供所有这些信息,尽管我主要是为了学习而这样做,但我最终可能会使用 Ably,而且 Ably 太容易了?以上是关于每个应用程序的 Apache Kafka 主题的主要内容,如果未能解决你的问题,请参考以下文章
使用 spring kafka 中的注释为每个主题单独的 Kafka 侦听器
golang 快速入门让Golang kafka驱动程序发布到“测试”主题,这些主题是从快速入门指南创建的http://kafka.apache.org/docum