我想要实现一个 Kafka GraphQL 微服务,它可以生成多个主题。该微服务将作为其他微服务可以轻松向其发送消息的服务。对此生产者微服务的每个请求都将包含它想要发布到的主题以及与该主题关联的有效负载。在我看来,这是一种比让每个想要发布到主题的服务都拥有 kafka 库代码和与能够生成主题相关的任何其他样板代码更简化的方法。所有特定于 Kafka 的逻辑都将驻留在生产者服务中,从而减少跨服务的重复代码量。
最佳答案
根本不是反模式。 Producer 也是线程安全的。
Confluence 的 Kafka REST 代理已经通过向端点提供一组分区+记录对象来做到这一点
POST/clusters/{cluster_id}/topics/{topic_name}/records
文档 - https://docs.confluent.io/platform/current/kafka-rest/api.html#records-v3
但是,根据您的用例,我建议使用已针对您想要生成的特定事件(而不是用户提供的)硬编码的主题来实现 GraphQL 解析器。换句话说,防止不良行为者用随机数据填充任何随机主题。
In my mind this is a more streamlined approach than having every service that wants to publish to a topic have kafka library code and any other boilerplate code associated with being able to produce to a topic
该“样板”本身可以是一个外部库,例如 Autowiring 的 Spring-Kafka Bean
关于apache-kafka - 针对多个主题拥有标准化的 Kafka Producer 微服务是一种反模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73903557/