
1) 【一句话结论】:采用云原生架构(K8s容器化部署),构建“实时+批处理”混合数据管道。通过Debezium捕获核心系统变更日志,Flink处理实时清洗(低延迟),Spark处理历史补全,数据存储于S3,计算引擎为EMR on EKS(Hive on EMR),通过Airflow调度与监控保障可靠性与弹性扩展。
2) 【原理/概念讲解】:老师口吻解释数据管道核心流程。数据管道是“抽取-清洗-加载”三步闭环,云原生下容器化部署(Docker/K8s),事件驱动(Kafka为消息队列)。以交通银行账户交易为例:
3) 【对比与适用场景】:
数据集成工具(Flink vs Spark):
| 工具 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| Flink | 分布式流处理引擎 | 低延迟、状态管理、Exactly-Once语义、事件时间处理 | 实时数据管道(如交易实时分析)、事件驱动系统 | 部署复杂度较高,需熟悉流处理编程模型 |
| Spark | 通用计算引擎 | 批处理、流处理、机器学习 | 批量ETL、复杂计算(如历史数据聚合)、机器学习模型训练 | 一次处理,延迟稍高,但支持复杂SQL |
云存储(S3 vs OSS):
| 存储 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| S3 | 对象存储 | 高可用、持久化、版本控制、跨区域复制 | 数据湖、数据仓库、备份 | 读取延迟相对较高,写入成本(按量付费) |
| OSS | 对象存储 | 与阿里云生态深度集成(如与RDS联动)、地域限制 | 外部数据接入(如与第三方系统对接)、本地数据上云 | 地域限制(需选择靠近数据源的地域),访问控制需额外配置 |
4) 【示例】:Flink实时处理配置(窗口时间、缓冲区):
# Flink作业配置(实时清洗交易数据)
from pyflink.common import Time
from pyflink.datastream import StreamExecutionEnvironment
from pyflink.table import StreamTableEnvironment, Table, StreamSchema
env = StreamExecutionEnvironment.get_execution_environment()
env.set_parallelism(4) # 并行度
env.set_stream_time_characteristic(Time.WINDOWED)
table_env = StreamTableEnvironment.create(env)
# 输入表(Kafka)
input_table = table_env.connect(
"kafka",
"bootstrap.servers=broker:9092",
"topic=transaction",
"value.format='json'"
).stream().table()
# 输出表(S3)
output_table = table_env.connect(
"s3",
"bucket=traffic-bank-data",
"path=processed/transactions/",
"format='parquet'"
).stream().table()
# SQL处理(实时清洗)
table_env.execute_sql("""
CREATE TABLE transaction_stream (
transaction_id BIGINT,
account_id BIGINT,
amount DECIMAL(10,2),
phone VARCHAR(20),
event_time TIMESTAMP(3)
) WITH (
'connector' = 'kafka',
'topic' = 'transaction',
'value.format' = 'json',
'value.converter' = 'org.apache.flink.json.JsonConverter',
'scan.startup.mode' = 'latest-offset',
'auto.offset.reset' = 'latest'
)
CREATE TABLE cleaned_transaction (
transaction_id BIGINT,
account_id BIGINT,
amount DECIMAL(10,2),
phone VARCHAR(20),
event_time TIMESTAMP(3)
) WITH (
'connector' = 's3',
'path' = 'processed/transactions/',
'format' = 'parquet',
'partitioned by' = 'event_time'
)
INSERT INTO cleaned_transaction
SELECT
t.transaction_id,
t.account_id,
t.amount,
t.phone,
t.event_time
FROM transaction_stream t
WHERE t.phone REGEXP '1[3-9]\\d{9}' -- 手机号校验
AND t.amount > 0 -- 金额非负
AND t.event_time IS NOT NULL
WINDOW TumblingWindow(size=1 second) -- 1秒窗口处理
""")
5) 【面试口播版答案】:面试官您好,针对交通银行云原生架构下的数据管道设计,我的思路是构建一个“实时+批处理”混合的端到端数据管道。首先,数据抽取部分,核心系统(如账户、交易系统)通过Debezium CDC捕获变更日志,外部数据源(如央行征信、第三方API)通过Kafka接入,确保多源数据实时汇聚。数据处理采用Flink(实时流处理)和Spark(批处理):Flink处理实时清洗(如交易异常过滤、手机号格式校验,窗口时间设为1秒,保证低延迟),Spark处理历史数据补全(如历史交易数据清洗、复杂聚合)。数据存储选择阿里云S3作为数据湖,高可用且支持版本控制,计算引擎用EMR on EKS(Hive on EMR),通过事务日志保证数据加载原子性。调度通过Airflow管理DAG,任务依赖和重试机制保障可靠性。监控方面,结合Prometheus和Grafana,实时监控作业状态、资源使用,确保管道稳定运行。整体架构容器化部署在K8s上,支持水平扩展,满足数据量增长需求。这样既能满足实时分析需求,又能通过云原生特性确保可靠性和可扩展性。
6) 【追问清单】:
7) 【常见坑/雷区】: