首页 > 解决方案 > 为电子商务网站设计实时数据管道

问题描述

我想学习 Apache Kafka。我阅读了文章和文件,但我无法弄清楚 Kafka 是如何工作的。我有很多问题:(我想创建一个 Kafka 集群并开发一些代码来准备数据工程面试。但是,我被卡住了。任何帮助将不胜感激。我将尝试在示例场景中解释我的问题.

例如,有一家受欢迎的电子商务公司。他们有大量的网络流量。该网站在 AWS 上运行。移动应用程序也使用 AWS 服务。

营销部门希望观察他们的广告操作(如电子邮件、短信等)的效率。他们还希望在仪表板中跟踪重要的实时指标(已售产品、页面浏览量、最近 n 分钟内的活跃用户等)。

首先,活动自动化系统向目标客户发送个性化的活动电子邮件。当用户点击广告电子邮件中的链接时,浏览器正在打开电子商务网站。

在后台,网站开发人员应向 Kafka 集群发送点击流事件,并附带相关参数(如客户 ID、广告 ID、来源媒体等)。

标签: apache-kafkaarchitecture

解决方案


你真的在这里问了几个不相关的问题。首先,Kafka 有很多免费的文档可供使用,还有很多高质量的“入门”模块以及付费书籍和课程。我肯定会从那里开始。你可能还有问题,但至少你会对平台有更好的认识,你可以用更集中的方式提问,希望能得到更好的答案。从官方文档开始。就个人而言,我是通过阅读Effective Kafka这本书来学习 Kafka 的,但我相信还有很多其他的。

浏览你的问题列表。

当用户加载网站时,后端开发人员如何向 Kafka 集群发送消息?开发人员应该发送 post 请求还是 get 请求?他们是其他选择吗?

该网站通常会发布一个事件。这是通过打开与一组 Kafka 代理的客户端连接并将记录发布到某个主题来完成的。你提到了 POST/GET 请求:这不是 Kafka 通常的工作方式——客户端建立到代理集群的持久连接。但是,如果您首选的编程模型是 REST,Confluent 确实为此用例提供了 Kafka REST 代理。

然后数据工程师应该将这个点击流消息引导到存储层。(例如 AWS S3)。这会导致 AWS S3 存储桶中的小文件过多吗?这会减慢数据流的执行速度吗?

这取决于您如何写入 S3。您可以开发一个自定义的消费者应用程序,将写入分阶段写入不同的持久层,然后分批写入 S3。Kafka Connect 还具有一个 Amazon S3 连接器,可以以块的形式移动数据。

数据工程师需要开发数据管道才能进行实时分析。数据工程师应该使用哪些技术?(Kafka Connect、Kafka Streams、生产者和消费者等)

这里没有正确答案。您列出的所有技术都是有效的,并且可以用于类似的效果。Connect 和 Streams 都非常适合这类应用程序;但是,您可以轻松地编写一个自定义的消费者应用程序来满足您的所有需求。

Kafka 主题可能有很多消息。一条消息可以被不同的消费者消费。消费者从 Kafka 主题中读取消息。然后,即使过了一段时间,另一个消费者也可以阅读它。因此,数据工程师需要管理偏移量,以便一条且一条地使用所有消息。他们如何正确管理偏移量?

在最简单的情况下,Kafka 偏移量管理是自动的,并且默认行为允许至少一次交付,如果第一次处理尝试失败,则将再次交付记录。这可能会导致重复效果(如您所述,两次计算点击流事件),但这可以通过使您的消费者 idempotent来解决。这是一个相当复杂的话题;Quora上有一个很好的答案,详细介绍了一次性交付的问题。

事件顺序可能很重要。营销部门想要查看类别视图持续时间。例如,用户查看电子书类别中的 10 本书。创建了十个事件。用户在他/她的第一个操作之前位于同一类别页面上。所以数据工程师需要计算第一个事件和最后一个事件之间的持续时间。

秩序的概念在 Kafka 中得到了支持。Kafka 的主题被分片到分区中,每个分区都是一个完全有序的、无界的记录流。记录可以严格排序,前提是它们发布到同一个分区。这是通过为它们分配相同的键来实现的,Kafka 客户端在后台对其进行哈希处理以到达分区索引。具有相同键的任何两条记录将占用相同的分区,因此将被排序。


推荐阅读