基於 kafka 的日誌資料建模測試
一、前言
我所參與的實際業務中,遊戲日誌鏈路為遊戲客戶端直傳,落入 HBase 中,中間會經歷一次 kafka 訊息佇列,正常提測的時候是對 HBase 中已經存入的資料做建模校驗,但是此時若發現資料不準確,資料丟失,就已經造成了反外掛服務在提取使用者資料分析時的一些不準確預測。針對這種資料鏈路的場景,我們需要提前介入測試,從遊戲客戶端直傳日誌的時候就要開始對遊戲日誌資料進行測試,因為遊戲資料是透過 kafka 直傳,所以我們需要直接對 kafka 中的遊戲資料進行直接測試。
二、什麼是 Kafka
相信很多同學在工作中或多或少都有接觸過訊息中介軟體,kafka 就是其中一種,Kafka 是最初由 Linkedin 公司開發,是一個分散式、分割槽的、多副本的、多訂閱者,基於 zookeeper 協調的分散式日誌系統(也可以當做 MQ 系統),常見可以用於 web/nginx 日誌、訪問日誌,訊息服務等等。
主要應用場景是:日誌收集系統和訊息系統。採用的是釋出 - 訂閱模式
這裡我們不做過多的 kafka 講解,介紹一下 kafka 中某些角色以及他們的作用
Broker:Kafka 叢集包含一個或多個伺服器,伺服器節點稱為 broker
Topic: 每條釋出到 Kafka 叢集的訊息都有一個類別,這個類別被稱為 Topic(物理上不同 Topic 的訊息分開儲存,邏輯上一個 Topic 的訊息雖然儲存於一個或多個 broker 上但使用者只需指定訊息的 Topic 即可生產或消費資料而不必關心資料存於何處)
Pritition: topic 中的資料分割為一個或多個 partition,儲存訊息的分割槽。
Producer:生產者即資料的釋出者,該角色將訊息釋出到 Kafka 的 topic 中。
Consumer: 消費者可以從 broker 中讀取資料。消費者可以消費多個 topic 中的資料
Consumer Group:每個 Consumer 屬於一個特定的 Consumer Group
kafka 的更詳細的介紹這裡就不展示了,感興趣的小夥伴可以去 kafka 官網學習
三、如何測試 Kafka 中的資料呢
由於上文已介紹了 Kafka,所以我們只需要開啟一個 Consumer 即可消費 kafka 中的資料進行資料測試,這裡採用了 kafka-python2.0.1,利用 KafkaConsumer 拉取資料
官方定義的配置 config 很多,具體配置還是要根據當前的業務調整,如上文中的 auto_offfset_reset='earliest'配置了即可消費到最早可以消費到的資料,若是要消費最新的資料,即可去掉這一條配置。
基於檢測任務,所以還是取最新未消費的資料進行拉取校驗。
消費程式開啟後,會不定的消費資料,我們的檢測任務需要一直執行而不停止嗎?在如此大批次的資料情況下,做到每條資料都檢查並做結果輸出是比較困難的,所有我們採取抽樣檢查,再啟動消費者的時候,可以控制消費的數量來達到一次任務需要檢查的日誌條數。
Kafka 叢集有帶認證和不帶認證的,小夥伴需要注意兩種叢集的配置方式。
如上,我們可以自定義採集需要的日誌數量,當日志數量採集完成後,對採集的日誌資料做一次日誌解析後進行資料建模測試,具體解析規則,建模規則校驗試具體建模需求而定。
如果我們採取了一直消費最新的日誌,定義的採集數量比較多,但是資料傳送過來比較少怎麼辦,那我們的採集校驗程式需要一直進行下去嗎,如何優雅的停止我們的消費程式呢?,上文的 Kafka_Consumer 中 consumer_timeout_ms 的配置可以解決這個問題,自定義超時時間,如果在設定的時間內未採集到資料,那麼會自動退出消費程式。
採集好需要檢查的日誌後,可以自定義異常方法去輪詢採集的資料,將不符合採集要求的異常資料以及異常原因保留下來即可完成資料建模測試,並且觀察結果可以快速觀察每條日誌中的資料建模的錯誤原因。
具體資料解析程式碼根據各個業務資料做規則解析,這裡就不貼程式碼了。
四、接入的日誌任務變多了呢?
這個時候,部門的核心宗旨就體現出來了,測試能力工具化,測試工具平臺化。
做成服務化,可以新建執行任務,任務進行週期排程
任務頁面可以實時查詢檢測結果,加入排程任務可對任務資料監控,驗證錯誤即可告警。
五、總結
本文只是從提測資料鏈路中的上一鏈路進行了資料保障,真正的資料保障需要做到全鏈路的資料保障,任重而道遠,若有小夥伴有更好的思路或者技術手段,歡迎賜教。
相關文章
- 測試,ogg從歸檔日誌中抽取資料
- 大資料03-整合 Flume 和 Kafka 收集日誌大資料Kafka
- kafka 測試遇到掉資料的問題 nmred/kafka-PHPKafkaPHP
- 基於 MongoDB 的 python 日誌功能MongoDBPython
- 大資料開發過程中Kafka日誌結構解析大資料Kafka
- 如何把 Laravel 的日誌推到Kafka?LaravelKafka
- 使用Kafka做日誌收集Kafka
- 基於大資料模型的數字孿生建模方法大資料模型
- 日誌-log4j2基於AsyncLogger的非同步日誌列印非同步
- 日誌-log4j2基於AsyncAppender的非同步日誌列印APP非同步
- 測試在丟失歸檔日誌的情況下,跳過部分歸檔日誌進行資料恢復資料恢復
- 基於等保3.0的MySQL資料庫審計日誌外掛實踐MySql資料庫
- Kafka 入門(二)--資料日誌、副本機制和消費策略Kafka
- Kafka-之資料日誌儲存(格式變化與壓縮)Kafka
- mysql 基於日誌的主從複製MySql
- 2.4 一種基於kafka增量資料校驗的方案Kafka
- [資料整合/資料同步] 基於資料庫增量日誌的資料同步方案 : Flink CDC/Debezium/DataX/Canal/Oracle Goldengate/Kettle/Sqoop資料庫OracleGoOOP
- 基於PDF資料編寫PRD長文件測試案例
- 基於事件日誌的流程挖掘簡介 - Chaudhuri事件
- Logback詳細整理,基於springboot的日誌配置Spring Boot
- 基於slf4j的日誌工具類
- Cmocka 單元測試日誌記錄Mock
- 如何基於日誌,同步實現資料的一致性和實時抽取?
- 如何優雅的將Laravel日誌推到Kafka?LaravelKafka
- 基於.NetCore3.1系列 —— 日誌記錄之自定義日誌元件NetCore元件
- filebeat 收集nginx日誌輸出到kafkaNginxKafka
- kafka-log日誌程式碼解析Kafka
- 開放平臺日誌推送---kafkaKafka
- 基於介面資料變異的App健壯性測試實踐APP
- 基於儲存過程的百萬級測試資料自動生成儲存過程
- 基於工業資料的檢測分析
- 博文推薦|Apache Pulsar 基於 Log4j2+Kafka+ELK 實現日誌的快速檢索ApacheKafka
- 基於flink和drools的實時日誌處理
- springboot超級詳細的日誌配置(基於logback)Spring Boot
- [elk]基於elk的業務日誌格式設計
- Android測試日誌檔案抓取與分析Android
- Kafka效能測試Kafka
- 新資料湖產品MinIO基於NVMe基準測試打破記錄