写点什么

Expedia 使用 WebSocket 和 Kafka 实现近实时的数据流查询

作者:Rafal Gancarz

  • 2024-01-13
    北京
  • 本文字数:1134 字

    阅读完需:约 4 分钟

Expedia 使用 WebSocket 和 Kafka 实现近实时的数据流查询

Expedia 实现了从他们的平台近实时地查询点击流数据的解决方案,这让他们的产品和工程团队可以在开发新的和增强现有数据驱动的特性时能够进行实时的数据探索。该团队使用了 WebSocket、Apache Kafka 和 PostgreSQL 的组合,可以连续向用户浏览器流式传输查询结果。


Expedia 的多个来源会产生大量数据,包括网站上的交互。用户在浏览网站或与网页元素进行交互时收集的点击流数据可以提供宝贵的用户行为见解。Expedia Group 的数据工程师(目前在 Personio)Ryan Lacerna 解释了近实时查询的优势:


为了确保数据质量,我们面临的一个挑战是在数据注入管道后可以立即查看数据。传统的方法,如查询数据湖和数据仓库,需要较长的处理时间,而基于事件驱动的工具可以让用户快速高效地查询和查看流式数据,为数据生产者提供快速反馈,让数据使用者可以了解捕获了哪些数据。


该团队选择使用 WebSocket 实现网页浏览器和服务器之间的双向实时通信。使用 WebSocket 的优势在于可以避免不断刷新服务器数据。此外,WebSocket 基于单个长连接,可以提高性能和最小化资源开销。



近实时查询解决方案的架构(来源:Expedia 工程博客)


该解决方案包含了 UI 应用程序、WebSocket Handler 和 Filter Worker,并使用了 Apache Kafka 主题和 PostgreSQL 数据库。UI 提供了一个简单的查询表单,用户可以指定要显示的点击流事件类型,并提供了一个通过 WebSocket 发送查询结果的小部件。UI 应用程序使用 SockJS 库和 [STOMP 协议] 实现 (https://en.wikipedia.org/wiki/Streaming_Text_Oriented_Messaging_Protocol) 与服务器的交互。


在服务器端,WebSocket Handler 负责处理 STOMP 格式的查询,并将流式结果发送回浏览器。Handler 从 Apache Kafka 主题读取经过筛选的点击流事件。Filter Worker 负责基于活动查询将经过筛选的事件流发布到 WebSocket Handler 订阅的 Kafka 主题中。这两个服务在 Kubernetes 运行了多个副本,具备了可伸缩性。


服务使用 PostgreSQL 数据库来同步查询的细节,其中包括点击流事件的筛选条件。WebSocket Handler 将查询过滤器持久化到数据库表中,并在用户断开会话或 TTL(生存时间) 到期(在用户会话存在的情况下)时将其删除。该解决方案依赖了 Postgres 的 LISTEN/NOTIFY 功能,确保 Filter Worker 根据数据库的变更保持其内存缓存的最新状态。



将筛选事件路由给用户(来源:Expedia 工程博客)


与源主题相比,Filter Worker 服务显著减少了发布到筛选主题的事件的数量。发布到筛选主题的消息使用 Filter ID 作为键,WebSocket Handler 利用这个 ID 将消息路由给正确的用户。这种方法还支持对 WebSocket 层进行扩展,在工具用户数量增长时处理更大的负载。


原文链接


https://www.infoq.com/news/2023/12/expedia-websockets-kafka-query/


2024-01-13 08:0012749

评论

发布
暂无评论
发现更多内容

进程主要由哪几个部分组成?

InfoQ IT百科

递归算法的三个定律是什么?

InfoQ IT百科

大咖说 X 对话开源|论数据库人才发展战略

大咖说

数据库 阿里云 科技

计算机操作系统最基本的特征是什么?

InfoQ IT百科

消息传递通信的实现方式?

InfoQ IT百科

加密算法有哪几种?

InfoQ IT百科

Plato Farm 的MARK 处于永远通缩,经济模型解析

西柚子

CPU散热器是电脑标配吗?

InfoQ IT百科

企业如何进行数字化转型?零代码简道云剑指「全民开发」新机遇

ToB行业头条

算法的五大特征是什么?

InfoQ IT百科

什么是“哈希算法”?

InfoQ IT百科

易周金融观点 | 个人养老金制度正式出炉;居民贷款延期还款政策密集落地

易观分析

银行 养老金制度

什么是满二叉树?

InfoQ IT百科

EventBridge 集成云服务实践

阿里巴巴云原生

阿里云 云原生 事件总线 EventBridge 事件源

计算单链表的长度。

InfoQ IT百科

如何判断两个字符串是否互为回文?

InfoQ IT百科

输入一个链表,输出该链表中倒数第k个结点。

InfoQ IT百科

阿里云数字化安全生产平台 DPS V1.0 正式发布!

阿里巴巴云原生

阿里云 云原生 数字化 安全生产平台

玩转小程序压测

阿里巴巴云原生

小程序 阿里云 云原生 压测 PTS

数组去重的5种方法是什么?

InfoQ IT百科

在Windows中,当一个应用程序窗口被关闭,该应用程序将会保留在哪里?

InfoQ IT百科

动态重定位需要由什么来实现?

InfoQ IT百科

netty系列之:netty中常用的对象编码解码器

程序那些事

Java Netty 程序那些事 4月月更

什么是分治算法?

InfoQ IT百科

给定两个字符串s和t,判断这两个字符串中的字母是不是完全一样。

InfoQ IT百科

有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

InfoQ IT百科

国厂自研的操作系统都有哪些?

InfoQ IT百科

什么是完全二叉树?

InfoQ IT百科

数据结构和算法的关系?

InfoQ IT百科

图数据库|如何从零到一构建一个企业股权图谱系统

NebulaGraph

数据库 知识图谱

单调栈与栈的区别是什么?

InfoQ IT百科

Expedia 使用 WebSocket 和 Kafka 实现近实时的数据流查询_业务架构_InfoQ精选文章