Kafka事件路由器:过滤和基于内容的路由,如何?
Posted
技术标签:
【中文标题】Kafka事件路由器:过滤和基于内容的路由,如何?【英文标题】:Kafka Event Router: Filtering and Content based Routing, how? 【发布时间】:2021-10-03 09:47:45 【问题描述】:数据在 Kafka 的 chat.*
主题中可用。
我们可以只启动多个消费者,然后将所有内容挂钩到这个单一事件中以供消费。
但是,并非所有产品都希望处理主题中的完整事件。我们希望根据 topic 中记录的内容,将 topic 分支为多个 topic。如何在 Kafka 中执行基于内容的路由?
Kafka Streams 非常适合 Java 应用程序,但我们需要一个跨公司、适用于多种语言的多堆栈解决方案?
我们正在为 Kafka 寻找一种事件路由器。 AWS 事件桥就是这样做的!但它不是卡夫卡。你如何在 Kafka 中进行这种基于内容的路由?
有什么建议吗?
【问题讨论】:
生产到主题时需要路由吗?还是从topic中消费,然后分别过滤处理? 每个需要事件的产品都应该只获取单独主题中的事件子集。我是否需要编写一个路由器,其他消费者会在哪里订阅,或者在 Kafka 中是否有更好的方法来做到这一点? 假设您参数化和打包/容器化一个将路由/过滤主题的 Kafka Streams(或 MirrorMaker)应用程序,它使用什么语言真的很重要吗?最终,这种“每个服务模型一个主题”将停止干净地扩展,例如,如果服务子集托管在同一个代理上,并且这些服务下降 @Cricketeer 他没有谈论他的代理部署架构,不太明白为什么它不能扩展?对于您的示例有 3 个副本,ha 部署,应该可以工作,您能详细说明一下吗? 是的,我为 Kafka 设置了 HA。复制将发生在多个节点上。 【参考方案1】:ksqldb 是 Confluent 解决此问题的开源解决方案。
它建立在 Kafka Streams 之上。它有一个类似于 DSL 的 SQL,可以使以下流连接成为可能。它还有一个 HTTP API,可以直接查询。
支持过滤和流连接。 流-流连接(窗口连接) 流表连接(流丰富) 表-表连接(物化视图) 声明性查询语言指定如何从现有流和表创建派生流。 (KSQL) 用于指定查询以创建派生流的 API。 (KSQL 数据库 API)KSQL DB 现在也支持添加源连接器。这看起来棒极了!打算试试看。
KSQL DB 的使用方法如下:
【讨论】:
以上是关于Kafka事件路由器:过滤和基于内容的路由,如何?的主要内容,如果未能解决你的问题,请参考以下文章