Expedia 使用 WebSockets 和 Kafka 查询近实时流数据

Expedia 实时查询点击流数据的解决方案

Expedia 开发了一个支持近乎实时查询平台点击流数据的解决方案,旨在帮助产品和工程团队在处理新的或增强现有数据驱动功能用例时,能够探索实时数据。该解决方案结合了 WebSockets、Apache Kafka 和 PostgreSQL,实现了将流查询结果持续推送到用户浏览器的功能。

背景与挑战

Expedia 从多个来源生成大量数据,包括网站交互。用户在浏览网站或与网页元素交互时产生的点击流数据,能够为理解用户行为提供宝贵的洞察。然而,传统的数据查询方法(如查询数据湖和数据仓库)处理速度较慢,无法满足实时需求。

技术架构

该解决方案的架构包括以下几个关键组件:

  1. UI 应用程序:提供一个简单的查询表单,允许用户指定要显示的点击流事件类型,并通过 WebSocket 接收查询结果。
  2. WebSocket 处理器:处理以 STOMP 消息形式表达的查询,并将流式结果返回给浏览器。它从 Apache Kafka 主题中消费经过过滤的点击流事件。
  3. 过滤工作器:负责将基于活动查询的过滤事件流发布到 Kafka 主题中,WebSocket 处理器订阅该主题。

技术细节

  • WebSockets:用于实现浏览器和服务器之间的双向实时通信,避免了不断刷新服务器数据的需求,提高了性能并减少了资源开销。
  • Apache Kafka:用于处理流数据,确保数据的高效传输。
  • PostgreSQL:用于同步活动查询的详细信息,包括点击流事件的过滤条件。WebSocket 处理器将查询过滤器持久化到数据库表中,并在用户断开连接或会话超时后移除这些过滤器。

扩展性与性能优化

  • Kubernetes:WebSocket 处理器和过滤工作器服务在 Kubernetes 中运行多个副本,以实现可扩展性。
  • PostgreSQL 的 LISTEN/NOTIFY 功能:确保过滤工作器根据数据库中的变化更新其内存缓存。
  • 事件过滤:过滤工作器服务显著减少了发布到过滤主题的事件数量,降低了系统负载。

总结

Expedia 的解决方案通过结合 WebSockets、Apache Kafka 和 PostgreSQL,实现了对点击流数据的近乎实时查询。该架构不仅提高了数据处理效率,还通过 Kubernetes 和 PostgreSQL 的 LISTEN/NOTIFY 功能确保了系统的可扩展性和实时性。这一解决方案为数据生产者和消费者提供了快速反馈,有助于提升数据质量和用户体验。

阅读 26
0 条评论