使用Kinesis Data Firehose实现客户评论数据实时流处理

使用Kinesis Data Firehose实现客户评论数据实时流处理

data-science-on-aws AI and Machine Learning with Kubeflow, Amazon EKS, and SageMaker data-science-on-aws 项目地址: https://gitcode.com/gh_mirrors/da/data-science-on-aws

概述

在现代数据科学应用中,实时数据处理变得越来越重要。本文将介绍如何利用AWS Kinesis Data Firehose服务构建一个实时处理客户评论数据的完整流程。这个流程是data-science-on-aws项目中的一部分,展示了从数据摄取到实时分析的全过程。

技术架构

整个解决方案包含以下几个关键组件:

  1. Kinesis Data Firehose:作为数据摄取和传输的核心服务
  2. Kinesis Data Analytics:用于实时处理和分析流数据
  3. Lambda函数:处理特定事件和触发后续操作
  4. S3存储桶:持久化存储原始和处理后的数据
  5. CloudWatch:监控和可视化流处理指标

环境准备

在开始之前,我们需要初始化必要的AWS服务客户端和配置:

import boto3
import sagemaker
import pandas as pd
import json

# 初始化会话和客户端
sess = sagemaker.Session()
bucket = sess.default_bucket()
role = sagemaker.get_execution_role()
region = boto3.Session().region_name

sm = boto3.Session().client(service_name="sagemaker", region_name=region)
firehose = boto3.Session().client(service_name="firehose", region_name=region)
kinesis_analytics = boto3.Session().client(service_name="kinesisanalytics", region_name=region)

数据准备

我们使用亚马逊产品评论数据集作为示例数据源。首先需要下载数据集:

!aws s3 cp 's3://dsoaws/amazon-reviews-pds/tsv/amazon_reviews_us_Digital_Software_v1_00.tsv.gz' ./data/

然后加载数据并提取关键字段:

import csv
import pandas as pd

df = pd.read_csv(
    "./data/amazon_reviews_us_Digital_Software_v1_00.tsv.gz",
    delimiter="\t",
    quoting=csv.QUOTE_NONE,
    compression="gzip",
)

流处理应用状态检查

在开始发送数据前,我们需要确保Kinesis Data Analytics应用处于运行状态:

response = kinesis_analytics.describe_application(ApplicationName=kinesis_data_analytics_app_name)

import time

app_status = response["ApplicationDetail"]["ApplicationStatus"]

while app_status != "RUNNING":
    time.sleep(5)
    response = kinesis_analytics.describe_application(ApplicationName=kinesis_data_analytics_app_name)
    app_status = response["ApplicationDetail"]["ApplicationStatus"]
    print("Application status {}".format(app_status))

数据发送到Firehose

准备好数据后,我们可以开始将评论数据发送到Kinesis Data Firehose:

step = 1

for start_idx in range(0, 500, step):
    end_idx = start_idx + step

    df_star_rating_and_review_body = df[["review_id", "product_category", "review_body"]][start_idx:end_idx]

    reviews_tsv = df_star_rating_and_review_body.to_csv(sep="\t", header=None, index=False)

    response = firehose.put_record(Record={"Data": reviews_tsv.encode("utf-8")}, DeliveryStreamName=firehose_name)

监控与分析

为了监控流处理过程,我们可以查看以下几个关键界面:

  1. Lambda日志:查看处理过程中的日志信息
  2. CloudWatch指标:监控平均星级评分等关键指标
  3. Kinesis Analytics控制台:实时查看数据流和处理结果

异常检测

我们可以通过注入异常数据来测试系统的异常检测能力:

import time

anomaly_step = 1

for start_idx in range(0, 10000, anomaly_step):
    timestamp = int(time.time())

    df_anomalies = pd.DataFrame(
        [
            {
                "review_id": str(timestamp),
                "product_category": "Digital_Software",
                "review_body": "This is an awful waste of time.",
            },
        ],
        columns=["review_id", "star_rating", "product_category", "review_body"],
    )

    reviews_tsv_anomalies = df_anomalies.to_csv(sep="\t", header=None, index=False)

    response = firehose.put_record(
        Record={"Data": reviews_tsv_anomalies.encode("utf-8")}, DeliveryStreamName=firehose_name
    )

结果验证

处理完成后,我们可以检查S3中的结果数据:

  1. 原始数据:查看从Firehose接收的原始评论数据
  2. 转换后数据:查看经过处理后的结构化数据

原始数据示例:

R2EI7QLPK4LF7U    Digital_Software    So far so good
R1W5OMFK1Q3I3O    Digital_Software    Needs a little more work.....

转换后数据示例:

R2EI7QLPK4LF7U    5    Digital_Software    So far so good
R1W5OMFK1Q3I3O    3    Digital_Software    Needs a little more work.....

最佳实践

  1. 批处理大小:根据实际需求调整每次发送的记录数量,平衡延迟和吞吐量
  2. 错误处理:实现健壮的错误处理机制,确保数据不丢失
  3. 监控告警:设置适当的CloudWatch告警,及时发现处理异常
  4. 资源清理:使用完毕后及时清理测试资源,避免产生不必要费用

总结

通过本文介绍的流程,我们构建了一个完整的客户评论实时处理系统。这个系统可以扩展到各种实时数据处理场景,如用户行为分析、IoT数据处理等。AWS的托管服务大大简化了流处理系统的搭建和维护工作,让开发者可以专注于业务逻辑的实现。

data-science-on-aws AI and Machine Learning with Kubeflow, Amazon EKS, and SageMaker data-science-on-aws 项目地址: https://gitcode.com/gh_mirrors/da/data-science-on-aws

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姬牧格Ivy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值