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事件路由器:过滤和基于内容的路由,如何?的主要内容,如果未能解决你的问题,请参考以下文章

精通springcloud:使用API网关进行路由和过滤

思科策略路由 PBR 详解

每天学点SpringCloud:路由器和过滤器-Zuul

SpringCloud学习系列之七 ----- Zuul路由网关的过滤器和异常处理

思科路由器的故障日志详细介绍

WPF--路由事件