kafka Stream我爱编程

[译] 流式处理:使用 Apache Kafka 的 Strea

2018-04-19  本文已影响75人  听雨看花舞月

原文:Real-time Financial Alerts at Rabobank with Apache Kafka’s Streams API
原作者:Jeroen van Disseldorp

本文讨论使用 Apache Kafka 的 Streams API 向 Rabobank 的客户发送告警。Rabobank(荷兰合作银行)总部位于荷兰,在全球拥有 900 多个分支机构,48,000 名员工和 681 亿欧元的资产。Rabobank 是一家由客户和银行组成的合作银行,一家对社会负责的银行。其目标是成为荷兰金融市场的领导者。Rabobank 还致力于成为全球食品和农业领域的领先银行。Rabobank 向全球数百万客户提供金融产品和服务。


在过去的几年中,Rabobank 一直在为成为一家实时的,事件驱动的银行而进行积极的投资。如果你熟悉银行的业务流程,应该会明白这并不能一蹴而就。许多银行业务流程都是在非商用硬件上以批处理作业的形式进行的,因此迁移工作非常艰巨。但如前所述,Rabobank 接受了这一挑战
,并定义了一个业务事件总线(BEB,Business Event Bus),用于应用程序之间共享整个组织架构的业务事件。
Rabobank 选择 Apache Kafka 作为底层的主要引擎,并编写了自己的的 BEB 客户端库,以方便应用程序开发人员使用简单的消息生产/消费以及灾难恢复等功能。

Rabobank 采用 Active-Active 的 Kafka 设置,Kafka 集群在多个数据中心进行对称镜像。当数据中心出现故障或由操作人员干预后,BEB 客户端(包括本文讨论的基于 Kafka Streams 的应用程序)会切换到另一个 Kafka 集群,而无需重新启动。实现在灾难情景和计划维护时段内的 24×7 不间断运行。BEB 客户端库为生产者、消费者以及流式应用提供了这种切换机制。

Rabo Alerts 是一个由一系列生产、消费、流式消息等微服务组成的系统,基于 BEB 实现。下面讨论的所有数据类型和代码都可以在 GitHub 中找到。本文将在一定程度上简化源码清单(如删除未使用的字段),但这些清单仍反映了生产中实际运行的代码。

案例:Rabo Alerts

Rabo Alerts 服务可以让 Rabobank 的客户接收其关注的财务事件告警。例如某笔款项从账户中扣除或者记入账户,以及其它更复杂的事件。客户可以根据自己的偏好配置告警,并通过第三方渠道发送:如电子邮件、短信和移动推送通知。值得一提的是,Rabo Alerts 并不是一项新的或试用服务,它已经投产十多年,可供数百万账户持有者使用。

面临的问题

旧的 Rabo Alerts 实现主要是在大型机系统上。所有的处理步骤都是面向批处理的,大型机会根据告警类型派生告警,并每隔几分钟发送,但每天只发送几次。这种实现非常稳定可靠,但 Rabobank 希望解决两个问题:(1)灵活性不足;(2)告警发送速度慢。

由于对现有告警进行更改或添加新(更智能)的告警需要很大的工作量,因此旧的 Rabo Alerts 对适应新业务需求的灵活性很低。在过去几年中,Rabobank 在其在线环境中引入新功能的步伐大幅增加,旧有僵化的告警解决方案变得越来越成问题。

告警的传递速度也是一个问题,旧的 Rabo Alerts 可能需要 5 分钟到 4-5 小时才能向用户发送告警(取决于告警类型和批处理窗口)。如果在十年前,这个速度可能足够快了,但如今客户的期望值要高得多。现在 Rabobank 向客户提供“相关信息”的时间窗口要比过去十年小得多。

因此,如何重新设计现有的机制,使其具有更强的扩展性及更快的速度,便是摆在眼前的问题。当然,重新设计的 Rabo Aerts 也需要稳定可靠,以便能够正确地为现有数百万的用户群提供服务。

从小处着手

在过去的一年里,我们一直使用 Kafka 及其 Streams API 重新设计和实现告警机制。由于整个 Rabo Alerts 服务相当庞大,我们决定从四个简单但使用率高的告警开始:

这些告警的每一个都可以从当前账户系统的支付信息流中派生出来。例如:“当我的余额低于 100 欧元时向我发送短信”或“当有人给我超过 1000 欧元时向我推送消息”(通常用于存款通知)。

以下截图说明如何通过手机银行 app 配置 Rabo Alerts ——

image
上一篇下一篇

猜你喜欢

热点阅读