使用aws Glue与kinesis 构建的流式ETL作业——一、数据实时采集

一、数据采集准备工作

1.1、研究的背景

为了可以更高效的从项目的数据集中提取更有意义的数据,并进行统计分析。

1.2、使用Glue构建流式ETL的原因

1、项目部署在AWS。
2、Amazon Glue中的流式ETL基于Apache Spark的结构化流引擎,该引擎提供一种高容错、可扩展且易于实现的方法,能够实现端到端的流处理。

1.3、无服务器流式ETL架构

在此流式ETL架构中,将使用lambda模拟日志创建cloudwatch指标并将其以流的形式发布至Kinesis Data Streams当中。我们还将在Amazon Glue中创建一项流式ETL作业,该作业以微批次的形式获取连续生成的stream数据,对数据进行转换、聚合,并将结果传递至接收器,最终利用这部分结果显示可视化图表或在下游流程中继续使用。

1.4、简易架构

在这里插入图片描述

1.5、Kinesis Data Stream创建

Kinesis Data Stream的用处?:实时捕获数据
从数十万个数据源提取并存储数据流:
    日志和事件数据采集
    IoT 设备数据捕获
    移动数据采集
    游戏数据源
此案例中,我们将从CloudWatch中进行数据采集

步骤图例
1、入口在这里插入图片描述
2、创建(按需模式无需手动预置和扩展数据流)在这里插入图片描述

1.6、CloudWatch数据筛选

前置条件:已准备好用来进行数据采集的CloudWatch
我们将会在某个CloudWatch日志组中创建日志筛选条件

步骤图例
1、入口在这里插入图片描述
2、选择上步中创建的KDS在这里插入图片描述
3、IAM角色(需要有Kinesis Data Stream的权限)在这里插入图片描述权限与实体见下方“IAM角色权限”
4、配置筛选条件(可根据日志格式自定义)例如:图中配置为筛选包含"is_save_kinesis"的数据在这里插入图片描述
5、测试数据(可以选定某条日志流,或自定义数据进行测试结果显示)在这里插入图片描述
6、完成日志筛选条件创建(每个日志组最多只能创建两条在这里插入图片描述

IAM角色权限:
    可信实体:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "logs.【区域】.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringLike": {
                    "aws:SourceArn": "【CloudWatch的ARN】"
                }
            }
        }
     ]
}

    策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "WriteOutputKinesis",
            "Effect": "Allow",
            "Action": [
                "kinesis:DescribeStream",
                "kinesis:PutRecord",
                "kinesis:PutRecords"
            ],
            "Resource": [
                "【Kinesis Data Stream的ARN】"
                
            ]
        }
    ]
}

1.7、KDS中的数据验证

前置条件:一个已绑定上 以Kinesis作为触发器的Lambda实例
此案例也可使用Lambda来实现数据流的处理。每当Kinesis Data Stream中传入数据时,就会触发绑定了KDS的Lambda,有Lambda来清洗、转换、存储数据。
在我们向该CloudWatch中发送一条日志数据后,将会在Kinesis Data Stream控制台监控到数据的流入
在这里插入图片描述
在这里插入图片描述
接下来,我们将会验证解析一下Kinesis Data Stream中的数据与格式。
原始数据存储在event.Records[0].kinesis.data中(下一步的ETL工作中,我们会从此处获取数据)
验证代码:

def lambda_handler(event, context):

    raw_kinesis_records = event['Records']

    # records = deaggregate_records(raw_kinesis_records)
    records = raw_kinesis_records
    i=0
    for record in records:
        print("this is record")
        #Kinesis data is base64 encoded so decode here
        payload=base64.b64decode(record["kinesis"]["data"],validate=False)
        
        data = gzip.decompress(payload).decode("utf-8")
		print(data)
        i+=1
        
    print(i)

结果:
    其中的message为我们的原始数据的字符串
在这里插入图片描述

1.8、总结

在此案例中,我们使用了CloudWatch + Kinesis Data Stream完成了前期的数据实时采集的工作,并且,使用了Lambda来作为触发器来对数据进行了一个验证操作(也可使用Lambda来进行ETL工作)。

作者

Zikuo Su

  • 19
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值