Kafka + Flink 实时数据链路设计

Kafka + Flink 是实时数据链路里的经典组合,Kafka 负责承接数据流,Flink 负责清洗、窗口计算和状态处理。

Kafka + Flink 实时数据链路设计

实时数据链路通常从业务事件或日志开始,经 Kafka 缓冲,再由 Flink 清洗、聚合,最后写入 OLAP、数据湖或指标系统。

这和数据库系统专栏里的实时分析架构是同一条主线,只是这里从消息队列视角看 Kafka 的位置。

Rendering diagram...

Kafka Topic 设计

Topic 应该按业务域拆分,而不是所有事件都塞一个大 Topic。

常见拆法:

  • user-behavior-events
  • order-events
  • payment-events
  • app-logs
  • mysql-cdc-orders

分区数要结合吞吐、消费者并行度和顺序要求设计。分区太少限制并行,分区太多增加运维成本。

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 设计、状态管理、数据质量和监控。

参考链接