flume自定義攔截器遇到的問題
flume自定義攔截器遇到的問題
1:問題場景:
通過flume同步mysql資料到kafka,再由flink消費,kafka分割槽功能可以提高消費能裡,但是我們必須把一些有相同屬性的資料放在同一個partition中。
2:flume對kafkaSink提供兩種指定partition的配置
defaultPartitionId –
指定此通道中要傳送到的所有事件的Kafka分割槽ID(整數),除非partitionIdHeader覆蓋。預設情況下,如果沒有設定此屬性,則事件將由Kafka生成器的分詞器分發——如果指定,包括按鍵分發(或者由Kafka .partitioner.class指定的分詞器分發)。
partitionIdHeader – 設定後,接收器將從事件頭獲取使用此屬性值命名的欄位的值,並將訊息傳送到主題的指定分割槽。如果該值表示一個無效的分割槽,則將丟擲一個EventDeliveryException。如果頭值存在,則此設定將覆
3:怎麼解決自定義分割槽問題:
我們解決問題1的方法利用了partitionIdHeader 配置,就是想方法給event的頭新增上我們希望他存在的partition,做法是建立maven工程,繼承flume的Interceptor攔截器類,對event進行處理,具體步驟這篇部落格不詳細記錄,只記錄遇到的問題,後續部落格補充。
4:flume和mysql關係:
我為了檢測結果曾經把mysql資料清空方便做驗證,但是導致了我的指令碼獲取不到資料的更新,這個問題我被困擾了很久,我一開始並不知道與我刪除資料有關,結果浪費了很多時間排查,最後的解決方案是把指令碼里配置的state快取檔案刪除,再刪除資料庫從新開始處理資料
5:為什麼flume推送的資料是重複的
推送到kafka的資料我發現並不是我mysql最新新增的資料,並且因為我這個問題讓我思考,flume是怎麼做到推送最新資料的?經過查詢我發現需要設定一個數字型別的自增id,才能實現推送最新資料,且在儲存state的檔案裡記錄著上次消費到的最大數,我曾在網上看到有人說flume的同步是做查詢同步與canal拉取mysql日誌不同,flume是消耗mysql查詢資源的。所以我猜測flume的最新資料推送很可能就是類似mysql做了排序分頁查詢出來的。感覺在高質量資料同步的情況下並不敢貿然使用。
6:資料延遲場景:
在保證實用同一個id自增邏輯的資料,有多臺機器新增到某臺mysql機器,那也許到mysql的新增資料可能是 01273,45689,在我的測試中,第一次kafka收到的資料會是01273,第二次收到的資料是56789,所以就漏了一個4,重複了一個7。所以對於精確度要求高的資料不該使用flume計算
相關文章
- Flume內建攔截器與自定義攔截器(程式碼實戰)
- HandlerInterceptor - 自定義攔截器
- Dubbo自定義日誌攔截器
- Struts2自定義攔截器
- struts的常用配置以及自定義攔截器
- day13-自定義攔截器
- spring boot 新增自定義監聽器、過濾器、攔截器Spring Boot過濾器
- 短視訊開發app,webservice自定義加入攔截器APPWeb
- 自定義攔截器,攔截到了某個請求就返回給前端一個JSON串前端JSON
- 我自定義的攔截器為什麼會靠後執行?
- SpringBoot自定義攔截器實現IP白名單功能Spring Boot
- 攔截器,攔截器棧總結
- Spring MVC 中的攔截器的使用“攔截器基本配置” 和 “攔截器高階配置”SpringMVC
- SpringMVC攔截器,設定不攔截的URLSpringMVC
- SwitchResX自定義解析度時遇到的問題彙總
- MyBatis攔截器MyBatis
- Mybatis 攔截器MyBatis
- sql攔截器SQL
- Mybatis中的攔截器MyBatis
- Hanlp配置自定義詞典遇到的問題與解決方法HanLP
- SpringBoot攔截器中service或者redis注入為空的問題Spring BootRedis
- 解決spring cloud Feign遠端呼叫服務,新增headers解決攔截器攔截問題SpringCloudHeader
- axios攔截器iOS
- Mybatis Interceptor 攔截器MyBatis
- axios 攔截器iOS
- spring攔截器Spring
- Java interceptor 攔截器Java
- SpringMVC攔截器SpringMVC
- webwork的攔截器真是好用Web
- Java實現的攔截器Java
- grpc中的攔截器RPC
- SpringMVC中的攔截器SpringMVC
- ArkWeb頁面攔截與自定義響應 - 控制載入過程Web
- vue中用axios攔截器攔截請求和響應VueiOS
- Flume-NG原始碼閱讀之SourceRunner,及選擇器selector和攔截器interceptor的執行原始碼
- SpringMVC-攔截器SpringMVC
- 攔截過濾器模式過濾器模式
- gRPC(3):攔截器RPC