Kafka + Flink 实时数据链路设计
Kafka + Flink 是实时数据链路里的经典组合,Kafka 负责承接数据流,Flink 负责清洗、窗口计算和状态处理。
Kafka + Flink 实时数据链路设计
实时数据链路通常从业务事件或日志开始,经 Kafka 缓冲,再由 Flink 清洗、聚合,最后写入 OLAP、数据湖或指标系统。
这和数据库系统专栏里的实时分析架构是同一条主线,只是这里从消息队列视角看 Kafka 的位置。
Rendering diagram...
Kafka Topic 设计
Topic 应该按业务域拆分,而不是所有事件都塞一个大 Topic。
常见拆法:
user-behavior-eventsorder-eventspayment-eventsapp-logsmysql-cdc-orders
分区数要结合吞吐、消费者并行度和顺序要求设计。分区太少限制并行,分区太多增加运维成本。
Flink 消费
Flink 从 Kafka 读数据,做清洗和转换。
CREATE TABLE user_events (
event_id STRING,
user_id STRING,
event_name STRING,
event_time TIMESTAMP(3),
WATERMARK FOR event_time AS event_time - INTERVAL '10' SECOND
) WITH (
'connector' = 'kafka',
'topic' = 'user-behavior-events',
'properties.bootstrap.servers' = 'kafka:9092',
'format' = 'json'
);
Watermark 用来处理乱序事件。迟到数据是否接受,要根据业务指标要求决定。
消费堆积
Kafka 堆积通常说明下游处理速度跟不上上游写入速度。
常见原因:
- Flink 并行度不足。
- 状态太大。
- 外部维表查询慢。
- OLAP 写入变慢。
- 数据倾斜。
Exactly Once 不等于业务正确
Flink 和 Kafka 可以提供较强的处理语义,但业务层仍然要处理去重、幂等和迟到数据。
如果同一个事件本身重复上报,流处理框架并不会自动知道哪条是真的。
小结
Kafka + Flink 的本质是把事件流变成可查询、可告警、可分析的数据。Kafka 负责稳定承接数据,Flink 负责实时计算,最终系统质量取决于 Topic 设计、状态管理、数据质量和监控。