Flink 與 Kafka 是大數據實時處理領域的 “黃金組合”——Kafka 負責高吞吐、高可靠的實時數據收發,Flink 負責低延遲、高精度的實時計算分析,二者深度適配,能支撐電商實時風控、物流軌跡追蹤、直播數據大屏等各類高併發實時業務場景。下面用通俗易懂的方式拆解核心信息:
一、核心分工(為什麼是 “黃金搭檔”?)
|
組件
|
核心角色
|
通俗理解
|
|
Kafka
|
實時數據 “中轉站”
|
像快遞分揀中心,接收 / 暫存 / 分發海量實時數據(比如用户點擊、訂單、傳感器數據),能扛住每秒百萬級數據涌入,還不丟數據
|
|
Flink
|
實時數據 “加工廠”
|
像智能分揀機器人,從 Kafka 取數據,實時做計算(比如統計 5 分鐘內的銷量、識別異常訂單、計算實時庫存),結果可回寫 Kafka 或直接推給業務系統
|
二、核心優勢(組合使用的價值)
三、極簡使用示例(新手能看懂的核心邏輯)
java
運行
// 1. 配置Kafka數據源
Properties kafkaProps = new Properties();
kafkaProps.setProperty("bootstrap.servers", "localhost:9092"); // Kafka地址
kafkaProps.setProperty("group.id", "flink-click-group");
// 2. Flink讀取Kafka數據
DataStream<String> clickStream = env
.addSource(new FlinkKafkaConsumer<>("click_topic", new SimpleStringSchema(), kafkaProps));
// 3. 實時計算:按商品ID統計5分鐘內點擊量(滑動窗口)
DataStream<Tuple2<String, Long>> resultStream = clickStream
.map(json -> {
// 解析JSON格式的點擊數據,提取商品ID
JSONObject obj = JSON.parseObject(json);
return obj.getString("goods_id");
})
.keyBy(goodsId -> goodsId) // 按商品ID分組
.window(TumblingProcessingTimeWindows.of(Time.minutes(5))) // 5分鐘滾動窗口
.count(); // 統計點擊數
// 4. 計算結果寫回Kafka(供業務系統讀取)
resultStream
.map(tuple -> tuple.f0 + "," + tuple.f1)
.addSink(new FlinkKafkaProducer<>("click_count_topic", new SimpleStringSchema(), kafkaProps));
四、適用場景 & 注意事項
- 實時數據計算(電商實時銷量、直播在線人數、物流軌跡實時更新);
- 實時監控 / 告警(服務器指標實時監控、生產設備異常實時報警);
- 數據管道搭建(將分散的實時數據統一收集、清洗後分發到各系統);
- 流批一體分析(既看實時數據,又能回溯歷史數據做對比)。
- 純離線小數據量分析(比如每天統計一次銷售報表,用 Hive/Spark 批量處理更省事);
- 對延遲要求極低(微秒級)的場景(需搭配更輕量的消息隊列,如 Pulsar)。
五、核心總結