改变数据采集以加速实时分析
说初创企业利用大数据和人工智能来开发更多的创新商业模式并不新鲜。因此,大数据和人工智能事务在行政和技术论坛上无处不在。但它们往往被讨论到如此高的水平,以至于人们最终错过了这类公司的构件细节。
在这篇博文中,我将介绍现代公司最有价值的基石之一:实时处理数据的能力,这使得零售、媒体和娱乐以及金融等行业的数据驱动型决策成为可能。比如说。
- 行为和购买分析能够在飞行中提供更有针对性的产品和建议,为客户提供更加个性化的体验。
- 信息跟踪促使销售团队专注于最有效的营销渠道,而不是把时间花在业绩不佳的渠道上。
- 支出模式分析使金融机构能够在欺诈行为发生之前发现它,有效防止损失。
但是,如果你工作的公司没有进入实时数据时代呢?首先,你并不孤单。许多公司仍然以批处理作业的方式处理数据,这可能意味着1天、7天......30天的分析数据延迟。这种情况发生在各种规模的公司,但并不意味着如果公司的目标是更进一步,就没有垂手可得的成果。
人们可能认为一个公司需要大量的工程努力来组建一个实时分析管道,包括现代化的交易系统和建立一个事件流平台,但事实并非总是如此。例如,变化数据捕获(又称CDC)带来了一种无痛的方法来移动数据,尤其是从交易型数据库到数据湖。稍后我将演示它是如何工作的。
什么是变更数据捕获?
根据定义,变更数据捕获是一种数据集成的方法,它基于对企业数据源所做变更的识别、捕获和交付(来源:维基百科)。它解决了与在企业内安全、可靠、快速和一致地移动数据有关的问题。大多数变化数据捕获产品的一个共同特点是对源数据库的影响较小,特别是那些依赖日志扫描机制的产品。
变更数据捕获服务于各种目的。
- 由事务性数据库变化引发的最小努力的数据流。
- 实时的数据库复制以支持数据仓库或云迁移。
- 实时分析的实现,因为数据从交易环境转移到分析环境,延迟真的很低。
- 启用 零停机时间的数据库迁移.
- 用于调试和审计目的的时间旅行日志记录。
现在有许多变化数据捕获解决方案。Debezium可能是最流行的开源解决方案,经常与Apache Kafka一起使用以实现事件流。HVR已经有十多年的历史了,目前仍在积极开发中。它可以部署在领先的云供应商中,但我不会说它是一个云原生的解决方案,因为它需要一个彻底的设置。另一方面,Arcion和Striim是较新的技术,有云和自我托管的部署模式。
在这一点上,我猜你想知道变化数据捕获是如何工作的,所以让我们看看一些实践的东西。
使用Arcion进行变更数据采集的实践指南
为了说明问题,想想一家零售公司,在其交易环境中拥有大量的发票数据,但没有利用这些数据来做出明智的决策。他们的目标是投资于数据分析,但他们的内部数据中心不会支持这样的额外工作负载,所以他们决定评估更合适的云解决方案 - 从 Snowflake 开始。鉴于他们仍在评估云产品,他们希望以最少的开发工作释放分析能力。实时数据库复制对这个用例有很好的适应性。
我需要一些零售发票来证明它是如何工作的,Kaggle上有几个免费的零售数据集样本。我打算使用在线零售II UCI,因为它可以很好地满足我们的目的,并很容易让我们使用原始数据来创建一个一对一的数据副本到我们的数据湖,在Snowflake中创建。这将有效地为我们的数据湖创建一个铜层方法。
MySQL将被用作源。它是一个广泛使用的,但容易设置的关系型数据库,所以大多数人将遵循我正在做的事情,并可能能够与其他数据库复制的步骤。
Snowflake将被用作目标数据仓库,因为它在市场上有巨大的影响力。几乎一半的财富500强都在使用它(来源:Snowflake Fast Facts 2022报告),同样,读者可能会用其他数据仓库复制这些步骤。
我还打算使用Arcion,因为它提供了云原生部署选项以及OLTP和数据仓库连接器支持,导致了一个简单的设置过程。
MySQL的设置
1.创建源数据库
CREATE DATABASE arcion_cdc_demo;
USE arcion_cdc_demo;
2.创建源表
CREATE TABLE IF NOT EXISTS transactions (
transaction_id BIGINT NOT NULL AUTO_INCREMENT,
invoice VARCHAR(55) NOT NULL,
stock_code VARCHAR(55) NOT NULL,
description VARCHAR(255),
quantity DECIMAL(9,3) NOT NULL,
invoice_date DATETIME NOT NULL,
price DECIMAL(10,2) NOT NULL,
customer_id DECIMAL(9,1),
country VARCHAR(255),
PRIMARY KEY (transaction_id)
);
3.为复制事宜创建一个用户
CREATE USER `cdc-replication-agent`@`%`
IDENTIFIED WITH mysql_native_password BY `<password>`;
4.只授予该用户最小的必要权限
GRANT REPLICATION SLAVE, REPLICATION CLIENT
ON *.*
TO `cdc-replication-agent`@`%`;
GRANT SELECT
ON arcion_cdc_demo.transactions
TO `cdc-replication-agent`@`%`;
5.允许外部网络访问MySQL(默认端口为3306)。
这一步取决于托管MySQL服务器的基础设施,详细情况不在本博文的范围之内。如果由于任何原因不允许外部网络访问,请考虑在MySQL网络中设置Arcion的Replicant代理,而不是使用Arcion Cloud。
6.将数据加载到源表中
LOAD DATA LOCAL INFILE '/tmp/online_retail_II.csv'
INTO TABLE transactions
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
IGNORE 1 ROWS
(invoice, stock_code, description, quantity, invoice_date, price, @customer_id, country)
SET customer_id = NULLIF(@customer_id, '');
7.设置二进制日志格式为ROW
你还需要确保MySQL实例的二进制日志格式(binlog_format)被设置为ROW,以支持CDC与Arcion。这可以通过多种方式完成,取决于实例的部署方式和地点。下面是在亚马逊 RDS 上运行 MySQL 时如何做的一个例子。
Snowflake 设置
1.创建目标数据库
CREATE DATABASE demo;
USE demo;
2.创建目标模式
CREATE SCHEMA arcion_cdc;
USE demo.arcion_cdc;
3.创建目标表
CREATE TABLE IF NOT EXISTS transactions (
transaction_id NUMBER,
invoice VARCHAR(55),
stock_code VARCHAR(55),
description VARCHAR(255),
quantity NUMBER(9,3),
invoice_date TIMESTAMP_NTZ(9),
price NUMBER(10,2),
customer_id NUMBER(9,1),
country VARCHAR(255)
);
4.为复制事宜创建一个角色和一个用户
CREATE ROLE dataeditor;
CREATE USER cdcreplicationagent
PASSWORD = '<password>';
GRANT ROLE dataeditor
TO USER cdcreplicationagent;
ALTER USER IF EXISTS cdcreplicationagent SET DEFAULT_WAREHOUSE = COMPUTE_WH;
ALTER USER IF EXISTS cdcreplicationagent SET DEFAULT_ROLE = dataeditor;
5.授予该角色所需的权限
GRANT DELETE, INSERT, SELECT, UPDATE
ON TABLE demo.arcion_cdc.transactions
TO ROLE dataeditor;
GRANT ALL PRIVILEGES ON WAREHOUSE COMPUTER_WH TO ROLE dataeditor;
GRANT CREATE DATABASE ON ACCOUNT TO ROLE dataeditor;
Arcion Cloud CDC设置
在创建了数据源和目标后,我们现在要登录Arcion Cloud来设置我们的复制管道以启用CDC。你可以注册并登录到Arcion。
一旦登录Arcion Cloud,我们就会进入Replications界面。在这里,我们将点击屏幕中间的新复制按钮。
接下来,我们将选择我们的复制模式和写模式。有几个选项可以满足你的需要。对于复制模式,Arcion支持。
- 快照(初始加载)
- 完整(快照+CDC)
对于写模式,Arcion支持
- 替换
- 截断
对于我们这里的目的,我们将选择复制模式为Full,写模式为Truncating。你还会看到,我已经将复制命名为 "MySQL 到 Snowflake"。
一旦名称被填入并选择了复制和写入模式,点击屏幕底部的 "下一步"。
然后我们会被带到源屏幕。从这里,我们将点击创建新按钮。
然后我们将选择MySQL作为我们的源。
然后滚动到页面的底部,点击继续。
现在,我们可以添加我们的MySQL实例细节。这些细节包括。
- 连接名称
- 主机
- 端口
- 用户名
- 密码
所有其他字段都是默认的。对于用户名和**密码,**我们将使用我们先前针对我们的MySQL实例运行的脚本中创建的用户。
一旦连接被保存,我们将想从数据库中拉入模式。在下一页,我们将被提示点击同步连接器按钮。点击该按钮,Arcion Cloud将连接到我们的MySQL实例,并拉下模式。
一旦完成,Arcion Cloud的用户界面将显示检索到的模式。然后我们将点击屏幕右下角的 "继续",进入下一个步骤。
我们现在已经正确配置了我们的数据源。这将显示在下一个屏幕上,以及一个测试连接按钮。为了确保一切工作正常,我们将点击测试连接按钮。
测试完成后,结果应该是这样的。你可以点击 "完成"按钮来退出。
测试成功后,我们现在可以点击屏幕右下角的 "继续到目的地",进入我们设置目的地的步骤。
在目的地屏幕上,我们将点击新的连接,开始设置我们的Snowflake连接器。
然后,选择Snowflake作为您的连接类型,并点击继续。
在下一个屏幕上,输入你的连接细节。这些细节包括。
- 连接名称
- 主机
- 端口
- 用户名
- 密码
所有其他字段都是默认的。对于用户名和**密码,**我们将使用我们先前针对我们的 Snowflake 实例运行的脚本中创建的用户。
在下一个屏幕上,我们将同步连接器。单击 "同步连接器"并等待该过程完成。
一旦完成,你会看到模式加载到屏幕上。然后我们可以点击屏幕右下角的 "继续"。
我们在配置与Snowflake的连接的最后一步是测试连接。我们将点击测试连接按钮,并等待结果返回到Arcion Cloud。
你应该看到所有的测试都通过了,以确保Arcion可以访问所有需要的东西,以便创建连接。
注意:如果Host Port Reachable没有通过,请确保你的 Snowflake 连接的 URL 中没有包括 "https://"。这可能导致该检查出错。
现在,我们可以点击继续过滤,开始为我们的管道配置过滤器。
在 "过滤器"屏幕上,我们将勾选 "选择所有"复选框,这样我们所有的表和列都将从源头复制到目的地。
另外,你还可以点击地图表和每表配置(Applier Configuration Docs,Extractor Configuration Docs)按钮来添加进一步配置。为了我们的目的,我们将把这些保留为它们的默认值。在这之后,你将点击开始复制。
复制就会开始。
一旦初始数据被加载,管道将继续运行,监测变化,并将这些变化应用到目的地。空闲的管道仍将在屏幕的右上方显示RUNNING,但将显示行复制率为0,直到新的数据被写入源。你还会注意到,管道的阶段描述现在将显示变化数据捕获,而不是加载快照数据。
如果我们开始向 MySQL 实例添加数据(例如,通过再次运行我们的加载脚本),我们将看到 Arcion 检测到这一点,然后将实时同步这些数据到 Snowflake。
下一步是什么?
就这样,我们已经成功地用 Arcion 设置了一个支持 CDC 的数据管道。我们最初的数据从MySQL已经同步到Snowflake,未来的数据将被实时转移到Snowflake。
这种实时数据移动到Snowflake的性质可以为许多需要即时访问与一个或多个数据源或主数据库同步的数据的用例提供动力。对于零售企业来说,近乎即时的库存和供应链管理,更好的客户体验和产品建议,现在可以由这个管道和即时同步到Snowflake的数据驱动。这种新功能只需点击几下就可以解锁。
分析 大数据 变化 数据采集 数据库 关系型数据库
经Michael Bogan许可,发表于DZone。点击这里查看原文。
DZone贡献者所表达的观点属于他们自己。