【发布时间】:2023-01-14 09:21:01
【问题描述】:
我有一个相当高级的架构问题,可能没有 100% 明确的答案。我们目前正在考虑在 Azure Functions 中实现 Kafka Producer,而不是在某个容器中运行专用的 Producer 客户端。 Azure Functions 将由一些包含有效负载的 REST API 调用来调用。替代解决方案需要类似的东西,Producer 应用程序将通过一些基于 Java 的框架公开一些自定义 API 端点以获取数据,然后通过 Producer API 将数据传递给 Kafka - 在某些容器上持续运行的 Java 应用程序(如果需要的话) ,对于并行性来说是多余的)。
我的直觉告诉我这种使用 Azure Functions 的方法可能不是一个好的做法,因为据我所知,Kafka 中的 Producer 概念更多的是“连续”的东西,而不是“每条记录”实例化的东西,而不是短暂的作为 Azure Function,它可能在短时间内被实例化数千次。这种方法对我来说似乎不直观,因为我们会为每个传入记录调用整个生产者生命周期,为我们的 Kafka 集群生成大量额外的网络流量,并可能导致消息排序任意(对于某些用例可以忽略不计),忽略事实这可能是一个非常昂贵的解决方案。
但我也可能完全错了,也许这是好的/最佳实践,并且对于我提到的问题没有明显的缺点。从技术上讲,Azure Functions 方法应该更容易扩展,并且根据负载,调用 X Azure Functions 实际上比拥有 24/7 运行的生产者更便宜,但这在很大程度上取决于用例。此外,“自定义生产者”案例中的操作也是需要考虑的,无服务器不需要这种关于操作/部署/维护的考虑。
对此有什么想法或经验吗?
【问题讨论】:
标签: apache-kafka architecture azure-functions