我们欢迎 Superology 的数据架构师 Marijan Ralasic 作为嘉宾来到我们的博客。请继续阅读,了解 Superology 如何使用 ClickHouse 和 Kafka 来驱动客户定量数据。
Superology 是一家经验丰富的产品技术公司。自 2012 年以来,我们一直在体育博彩行业进行创新。2017 年被 Superbet 集团收购后,我们成为该行业的领导力量之一。如今,我们的平台被成千上万的人使用,每天处理数百万笔交易。为了满足用户需求并实现业务目标,我们在各个工作层面都采用数据驱动的方法。
我们重视个人成长,就像我们重视公司成长一样。因此,我们不遵循传统的企业模式,而是授权我们的员工发挥他们的才能,并端到端地拥有自己的工作。
收集客户定量数据
定量数据是企业可以轻松计数或衡量的东西,是具体且公正的数据点。Superology 使用定量数据来创建报告,使用统计工具进行分析,并创建随机实验过程。从 Superology 的角度来看,定量数据包括诸如统计应用程序或网站访问次数、客户在特定页面上的点击次数、社交版块中的评论和关注者数量以及各种转化事件和跳出率等指标。我们使用这些数据来修改我们的客户体验,以提高我们应用程序的满意度和实用性。我们希望为想要查找体育统计数据、参与社交活动并全面享受体育娱乐行业的人们实现最佳体验。
Google Protobuf
为了收集这些数据,我们正在使用 Google 协议缓冲区。协议缓冲区 (Protobuf) 是一种免费的开源跨平台数据格式,用于序列化结构化数据。该方法涉及一种接口描述语言,该语言描述了一些数据的结构,以及一个程序,该程序从该描述生成源代码,以生成或解析表示结构化数据的字节流。由于我们收集的数据结构可能有所不同,因此我们决定使用 oneof 字段来处理动态属性,并指定在一个消息中只能设置一系列字段中的一个。我们的数据以批处理方式序列化,因此单个 protobuf 消息可以包含各种事件和事件类型。以下是我们使用的 proto 方案示例。
syntax = "proto3";
import "google/protobuf/wrappers.proto";
// This is base event for analytics
message BaseMessage {
string id = 1;
oneof Events {
Event1 event_1 = 101;
Event2 event_2 = 201;
Event3_SubEvent1 event_subevent_1 = 301;
Event3_SubEvent2 event_subevent_2 = 302;
…
Event4 event_4 = 401;
…
};
string event_type = 3;
string session_id = 4;
bool gdpr_accepted = 5;
}
message Event1 {
}
message Event2 {
bool property1 = 1;
}
message Event3_SubEvent1 {
string property1 = 1;
string property2 = 2;
…
}
message Event3_SubEvent2 {
string property1 = 1;
string property2 = 2;
…
}
message Event4 {
google.protobuf.FloatValue property1 = 1;
}
}
ClickHouse Kafka 引擎和协议缓冲区
ClickHouse 内置了 Kafka 连接器,即 Kafka 引擎,ClickHouse 实现的输入类型之一是 Protobuf。此格式需要外部格式架构,请记住架构在查询之间缓存。使用给定的 protobuf 架构,ClickHouse 会自动跟踪已传递的消息,因此组中的每条消息仅计数一次。快速可靠是我们正在寻找的解决方案,而 ClickHouse 交付了这一解决方案。我们的 ClickHouse 实现使我们能够轻松地水平和垂直扩展它。生成的每条消息都摄取到我们的“大”原始表中,在这里,ClickHouse 列式结构为我们提供了极大的可扩展性。由于数据容易发生更改,因此我们确实允许更改我们的 proto 方案,但是,我们只允许添加新字段和扩展我们的 proto 方案。这样,我们确信我们将始终向后兼容。使用 ALTER TABLE 和 ADD COLUMN 子句向我们的原始表添加列/字段非常容易。如果我们想停止使用某个属性,我们会在 protoscheme 中弃用相应的字段,并在我们的原始表中注释该列已被弃用。这样,我们保持了历史数据的完整性,并且摄取照常继续。数据在发送到 S3 使用分层存储之前,会在我们的磁盘上保留一段时间。
过滤和转换我们的数据
原始表使用物化视图进一步扩展,并过滤掉我们真正想要分析的数据。我们使用 one of 字段中定义的事件来过滤数据,因此使我们能够仅查看客户行为的某些方面,例如页面点击。使用过滤选项,我们保持了特定事件或流消息的可撤回性,从而为我们提供了更多的调试和深入分析选项。最后,我们根据我们的要求转换数据,从而实现不同的视角,例如漏斗分析和客户分类。最终的转换是特定操作的聚合视图,这些操作最终将作为我们报告仪表板上的某些值。
实验
我们不仅将数据用于报告,还对其进行广泛的研究。ClickHouse 在管理 AB 测试和其他实验方面为我们提供了很大帮助,不仅通过其内置的统计函数(例如 welchTTest、mannWhitneyUTest 和其他有用的函数),而且还通过利用 ClickHouse 架构使我们能够更轻松、更高效地进行 AB 测试。我们经常使用贝叶斯 A/B 测试方法来制定我们的业务决策。这些方法比传统方法在计算上更昂贵,但 ClickHouse 及其广泛的统计函数集使我们能够创建一个工作流程,使我们能够做出快速、可解释和准确的决策。
未来
我们计划通过将 ClickHouse 架构与 MindsDB 结合使用来丰富它,这将使我们能够在数据库级别创建机器学习架构。此外,我们计划将 ClickHouse 转换推回 Kafka 流,使我们能够在下游应用程序中使用数据并丰富其他数据流。我们期待即将推出的新功能,例如 JSON 数据类型,我们希望与 ClickHouse Inc. 建立长期而成功的关系。