Flume 的選擇器決定了Source 如何將數據分發到多個 Channel。這就像 “快遞員如何分配包裹到不同的運輸通道”,有兩種策略:復制和多路復用。
一、復制(Replicating Selector):每個 Channel 都送一份
核心邏輯
將同一個 Event(數據)復制到所有配置的 Channel,就像 “一個快遞員同時給多個收件人發相同的包裹”。
應用場景
- 需要將數據同時寫入多個目的地(如同時備份到 HDFS 和 Kafka)。
- 示例:監控系統日志,同時存儲到 HDFS(長期歸檔)和 Elasticsearch(實時搜索)。
配置示例
# Source配置
a1.sources = r1
a1.channels = c1 c2 # 配置兩個Channel# 選擇器類型:復制(默認)
a1.sources.r1.selector.type = replicating
二、多路復用(Multiplexing Selector):按規則分配
核心邏輯
根據 Event 的Header 值(類似包裹上的 “地址標簽”),將數據路由到不同的 Channel,就像 “快遞員按收件地址分區域派送”。
應用場景
- 根據數據類型拆分(如將錯誤日志和訪問日志分到不同 Channel)。
- 示例:電商訂單數據,按支付方式(微信 / 支付寶)分流到不同 Kafka Topic。
配置示例
# Source配置
a1.sources = r1
a1.channels = c1 c2 # 配置兩個Channel# 選擇器類型:多路復用
a1.sources.r1.selector.type = multiplexing# 按Header中的"type"字段路由
a1.sources.r1.selector.header = type
a1.sources.r1.selector.mapping.error = c1 # type=error的Event走c1
a1.sources.r1.selector.mapping.access = c2 # type=access的Event走c2
a1.sources.r1.selector.default = c2 # 未匹配的默認走c2
三、對比與記憶技巧
維度 | 復制(Replicating) | 多路復用(Multiplexing) |
---|---|---|
數據流向 | 一個 Event 復制到所有 Channel | 一個 Event 只走一個 Channel(按規則選) |
比喻 | 快遞員給每個客戶都發相同的包裹 | 快遞員按地址分區派送包裹 |
配置關鍵詞 | replicating (默認,無需顯式配置) | multiplexing ?+?header ?+?mapping |
典型場景 | 數據備份、多目的地存儲 | 數據分類、分流處理 |
四、一句話總結
- 復制:“一份數據,所有管道都走一遍”(適合備份);
- 多路復用:“不同數據走不同管道”(適合分類)。
如果還是容易混淆,可以想象:
- 復制像 “群發消息”(所有人都收到相同內容);
- 多路復用像 “智能分揀”(根據包裹標簽選擇不同運輸路線)。