写点什么

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:0012859

评论

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

性能监控之Telegraf+InfluxDB+Grafana+Python实现Oracle实时监控

zuozewei

数据库 oracle 性能监控 签约计划第二季

使用 Apache APISIX serverless 能力快速拦截 Apache Log4j2 的高危漏洞

API7.ai 技术团队

Serverless log4j APISIX

性能工具之Java分析工具BTrace入门

zuozewei

Java 性能测试 性能分析 签约计划第二季

即时通讯(IM)开源项目OpenIM本周版本发布- v1.0.7web端一键部署

OpenIM

性能工具之常见性能工具一览

zuozewei

工具 性能测试 签约计划第二季

性能分析之单条SQL查询案例分析(mysql)

zuozewei

MySQL 性能测试 性能分析 签约计划第二季

性能监控之Filebeat+Kafka+Logstash+Elasticsearch+Kibana 构建日志分析系统

zuozewei

ELK 性能监控 日志监控分析 签约计划第二季

Xcode13 适配之打印启动时间

CRMEB

Apache Log4j 2 报高危漏洞,CODING 联手腾讯安全护卫软件安全

CODING DevOps

Apache DevSecOps CODING Log4j 2 腾讯安全

CODING 与悬镜安全达成战略合作,引领 DevOps 向 DevSecOps 创新模式升级

CODING DevOps

DevOps 数字化转型 DevSecOps

性能基础之CPU、物理核、逻辑核概念与关系

zuozewei

Linux 性能测试 基础 签约计划第二季

iKuai与DNSPod合作,搞了一个大动作!

网络安全 DNS DNS劫持

伙伴大会报名截止倒计时3天!

明道云

性能分析之构建 Linux 操作系统分析决策树

zuozewei

Linux 性能测试 性能分析 签约计划第二季

记录docker,k8s,oneops,.netcore搭建个人博客过程

哔啵哔啵

.net Docker k8s .net core oneops

【Promise 源码学习】第十六篇 - 了解 co 库

Brave

源码 Promise 12月日更

深度揭秘技术创新:全球首个知识增强千亿大模型是怎样炼成的?

百度大脑

人工智能

Apache Log4j2 远程代码执行 漏洞

try catch

5G与2021的双向奔赴

脑极体

TypeScript 之模块

冴羽

JavaScript typescript 翻译 前端 web前端

睁眼、耸肩、觉醒:人形机器人的吊诡与最终幻想

脑极体

性能监控之Sleuth+Zipkin 实现 SpringCloud 链路追踪

zuozewei

链路追踪 性能测试 SpringCloud 性能监控 签约计划第二季

时间紧资金少人才缺?8位产业专家带你破局AI智能化升级

百度大脑

人工智能

下周上海见!超越商业,创业邦100未来独角兽峰会议程抢先看

创业邦

Linux之ls命令

入门小站

Linux

工业4.0时代:低代码的兴起,或将掀起制造业格局的变革

优秀

低代码 工业4.0

皮皮APP x 武汉市残疾人福利基金会 共建成长乐园

联营汇聚

XTransfer技术专家康康:从普通程序员到架构师的进化之路

XTransfer技术

程序员 创业心态 创业公司 跨境支付 XTransfer

实用机器学习笔记九:数据部分总结

打工人!

机器学习 算法 学习笔记 12月日更

数据情报在金融行业的探索系列

nexpose

数据分析 目标追踪 风险识别 数据分析预测 数据情报

Android单页应用如何在Activity与Fragment中共享状态

Changing Lin

12月日更

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