Flink 替換 Logstash 解決日志收集丟失問題

在某客戶日志數據遷移到火山引擎使用 ELK 生態的案例中,由于客戶反饋之前 Logstash 經常發生數據丟失和收集性能較差的使用痛點,我們嘗試使用 Flink 替代了傳統的 Logstash 來作為日志數據解析、轉換以及寫入 ElasticSearch 的組件,得到了該客戶的認可,并且已經成功協助用戶遷移到火山。目前,Flink 已經支持該業務高峰期 1000+k/s 的數據寫入。

本文主要介紹 Logstash 的使用痛點以及遷移到 Flink 的優勢,探索在 ELK 生態中,Flink 替換 Logstash 的更多可能,推動用戶從 EL(Logstash)K 遷移到 EF(Flink)K。

Logstash 簡介

ELK 是一套開源的日志及數據監控和分析系統,主要是三個組件的簡稱:Elasticsearch, Logstash and Kibana,功能涵蓋了從日志收集、解析、查詢、分析、可視化等完整的解決方案。

上圖描述了 ELK 里各組件的關系,基于 libbeat 框架的各種 beats 工具將日志及各種數據進行收集,可以直接寫入 ES,也可以先寫入到 Logstash 進行解析和處理再寫入到 ES。如下圖所示,Logstash 主要包括三個部分:

  • 輸入插件:負責從各種不同的 source 讀取數據,如文件、beats、Kafka等;

  • 過濾插件:負責按照指定的配置修改和處理數據,如 grok 插件可以從固定日志格式中提取對應信息,drop 插件可以丟失諸如 debug 日志等能力;

  • 輸出插件:負責將結果數據輸出,如將處理后的日志數據寫入 ES 中。

Logstash 使用痛點

數據易丟失

Logstash 默認使用內存作為寫入數據的緩存,一旦發生重啟或者異常退出的時候,這部分數據就會發生丟失。雖然 Logstash 也提供了持久化隊列來解決這個問題,但是由于數據仍然是寫入機器磁盤中,當發生單機故障的時候,數據同樣也會丟失。同時,數據周期性的落盤也會對數據的處理性能帶來巨大的影響。

排查成本高

當日志數據格式不符合規范(如非標準 Json)造成丟失數據較多的情況時,需要在數據收集、數據解析、寫 ES 等全鏈路排查數據丟失的原因,一般需要查看機器日志,收集、處理節點較多的時候,排查成本也比較高。

除了日志數據本身不規范外,當由于其他原因導致數據不能正確處理的其他情況,比如寫 ES 各種異常,這部分數據也極易發生丟失,也需要查看日志進行跟蹤和定位。雖然 Logstash 單獨提供了死信隊列來處理這些情況,但是在這個鏈路丟失的數據仍然有排查的成本。

收集、解析性能差

Logstash 提供的各種插件基本都是用 Ruby 實現的,雖然 Logstash 本身也運行在 Java 的 JVM 上,并通過 JRuby 將各種插件也跑在 JVM 上,但是相比 Flink 100% Java 語言運行和執行效率會更低一些。

當開啟持久化隊列(為了保證數據盡可能少丟失),由于數據需要頻繁寫磁盤,Logstash 處理性能會進一步降低。同時,Logstash 處理性能較差也是業界的一大共識。

不支持資源動態擴縮容

由于 Logstash 本身的資源部署不支持動態擴縮容,會造成低峰期較大的資源浪費。在該客戶的案例中,業務高峰期的日志數據和活動期間的日志數據是在低峰期數據的 24 倍左右(高峰期 100w+ QPS,低峰期 50k QPS),且呈周期性變化。因此實際在業務低峰期,使用很少的資源就能夠保證日志數據的收集和解析,所以支持資源動態擴縮容是必須且必要的。

Flink 使用優勢

數據處理支持“at-least-once”語義

Flink 基于狀態引入分布式 checkpoint 機制,用于保證數據消費的“at-least-once”語義。其中狀態保存通過定期持久化到遠端可靠存儲(HDFS)來保證狀態不丟失。

需要說明的是,Flink 本身基于狀態是能夠做到嚴格意義上的“exactly-once”語義的,即消費和處理的不丟不重。如果 ES 支持了主鍵的配置,也就是相同主鍵寫入是冪等的情況下,則能在全鏈路做到“exactly-once”語義。

在該客戶的案例中,我們通過工具讀 Kafka 來統計寫入條數,跟實際 Flink 寫入 ES 的條數進行對比,證明了數據消費的“at-least-once”語義,解決了客戶在友商上使用 Logstash 經常發生數據丟失的痛點。

靈活的異常數據處理

對于 Kafka 中解析失敗的數據(比如格式為非 Json 的數據),在該客戶的案例中,我們支持了這部分的異常數據寫入獨立的 ES 索引,同時標識數據寫入原因(非標準 Json);對于寫 ES 異常失敗的數據,我們同樣會將這部分數據寫入獨立的 ES 索引,并且記錄寫 ES 失敗的原因,比如字段數超 1000,數據類型和模板定義的不一致等。

可以方便用戶對異常日志數據做治理,如該客戶推所有的上游業務日志標準 Json 化寫入 Kafka 等。相對的,在該客戶使用原友商的 Lostash 寫入 ES 的時候,這部分的數據丟失不僅不易排查(甚至不易知曉),而且也難以治理(丟失了寫 ES 失敗的原因)。

高吞吐、低延遲的處理性能

Flink 作為當前最熱的流式處理引擎,支持高吞吐、低延遲的處理日志數據,對數據處理能夠達到秒級的延遲且經過業內在其他 Kafka 數據更復雜處理場景的大量驗證,穩定而可靠。

資源自動擴縮容

在字節 Serverless Flink 中,我們也將支持資源隨著寫入 QPS 的動態調整,能夠節省較大的資源。目前,該功能已經在字節內部得到了實際驗證,在資源利用上取得了較大的收益。

更復雜的數據分析能力

相較于傳統的 ELK 鏈路,在 Logstash 中對日志數據進行簡單的數據格式匹配、內容替換等處理,Flink 還支持更強大的數據分析和處理,支持事件和業務處理時間,支持窗口計算、聚合、去重等。能對日志數據做更強大的數據處理和分析,將處理數據寫入 ES 后,能實現 OLAP 數據查詢和分析。

這部分數據處理和分析的能力也在字節內部得到了廣泛的應用,為業務帶來了很多實際的收益。

Flink vs Logstash 總結

對 Logstash 進行簡單介紹后,結合該客戶的案例,這里對比下 Flink 和 Logstash 的優劣:

Logstash

Flink

實際用戶案例

數據一致性

數據消費和寫入均可能發生數據丟失,且開啟持久化隊列后對性能影響較大

基于狀態提供嚴格意義上的“at-least-once”語義

  • 友商 Logstash 寫入 ES 發現數據丟失

  • 火山 Flink 經過和原始 Kafka 消息對比驗證數據不丟失

異常數據處理

需要單獨配置死信隊列和對應的處理私信隊列的邏輯,且處理失敗原因不易追蹤

提供數據解析失敗和寫 ES 失敗數據單獨往獨立索引寫入的能力,且同時記錄處理失敗原因,方便上游對日志進行治理

  • 友商 Logstash Json 解析失敗的數據丟失(沒有單獨配置死信隊列)

  • 火山 Flink 異常數據單獨寫 ES 的 error index,可用于用戶日志數據的治理(日志中臺推日志數據 Json 化)

處理性能

Ruby 語言本身執行效率低,且開啟持久化隊列后性能下降明顯

純 Java 執行語言,在大數據處理場景得到了廣泛的驗證,具有高吞吐、低延遲的特點

  • 友商 Logstash 200 topic 使用資源 320 cu,數據存在丟失現象(未開啟持久化隊列),也大部分 topic 在高峰期均有延遲

  • 火山 Flink 200 topic 使用資源 390 cu,收集數據無丟失,且高峰期沒有延遲

彈性擴縮容

(未來)提供自動彈性擴縮容機制,在業務低峰期節省資源和成本

  • 該客戶業務在一天之內有幾小時左右日志數據高峰期,其他時間均為低峰期日志特點,彈性擴縮容能節省資源,被客戶看重

復雜數據分析

不支持,官方插件僅支持基本日志字段處理

提供基于處理時間和事件時間,窗口計算等強大的處理語義和邏輯

暫未使用

【火山引擎流式計算 Flink版】

火山引擎流式計算 Flink版是脫胎于字節跳動最佳實踐的新一代全托管、云原生實時計算平臺。一套代碼輕松搞定流批一體,助力企業將大數據平臺向云原生、實時化、智能化方向升級。

目前,流式計算 Flink版 新人首購專享活動正在進行中。注冊用戶首次購買 Flink 產品包年包月,即可享受首月4折優惠,歡迎咨詢體驗。

「了解更多產品信息」


參考資料

  1. ELK Introduction — Log Consolidation with ELK Stack 1.2 documentation

  2. Filebeat overview | Filebeat Reference [8.10] | Elastic

  3. How Logstash Works | Logstash Reference [8.10] | Elastic

  4. Persistent queues (PQ) | Logstash Reference [8.10] | Elastic

  5. http://thomaslau.xyz/2019/08/14/2019-08-14-on_logstash_quiz1/

  6. Mid-uh 對比(圖表)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164076.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164076.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164076.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

實現一個計算機

圖片&#xff1a; 實現代碼&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>body {padding: 20px;font-family: Arial;}.calc-wrap {width: 300px;bor…

VL06O報表添加增強字段

業務描述 用戶需要在VL06O事務代碼下進行批量交貨過賬&#xff0c;現有的篩選條件不太適用當前公司的業務&#xff0c;需要在報表中新增三個交貨單增強字段&#xff0c;方便其篩選&#xff08;選擇屏幕沒有加&#xff0c;用戶在報表里用標準按鈕功能自己篩選&#xff09; 效果…

十一 動手學深度學習v2計算機視覺 ——微調

一、網絡架構 一個神經網絡一般可以分成兩塊 特征抽取&#xff0c;將原始像素變成容易線性分割的特征。線性分類器來做分類。 二、訓練 是一個目標數據集上的正常訓練任務&#xff0c; 但使用更強的正則化 使用更小的學習率使用更少的數據迭代 源數據集遠遠復雜于目標數據集…

藍橋杯算法雙周賽心得——迷宮逃脫(dp)

大家好&#xff0c;我是晴天學長&#xff0c;dp版的來啦&#xff0c;可以是受益匪淺啊&#xff0c;需要的小伙伴可以關注支持一下哦&#xff01;后續會繼續更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1) .迷宮逃脫 迷官逃脫[算法賽] 問題描述 在數學王國中&#xff0c;存…

便攜式心電圖機方案_基于MT6735平臺的手持心電圖機

便攜式心電圖機具備體積小、易攜帶、兼容12導模式的特點&#xff0c;通過工頻濾波、基線濾波和肌電濾波等處理&#xff0c;能夠獲得更精準的心電圖譜。該設備可以與醫院信息系統(HIS)相連接&#xff0c;實現患者信息的共享。采集的心電數據可以通過無線方式發送到心電判讀平臺&…

企業建數倉的第一步是選擇一個好用的ETL工具

當企業決定建立數據倉庫&#xff08;Data Warehouse&#xff09;&#xff0c;第一步就是選擇一款優秀的ETL&#xff08;Extract, Transform, Load&#xff09;工具。數據倉庫是企業數據管理的核心&#xff0c;它存儲、整合并管理各種數據&#xff0c;為商業決策和數據分析提供支…

PC8250(CC-CV控制)5V/8A同步降壓恒流恒壓軟啟動帶EN功能只需極少外圍元件

概述 PC8250是一個同步降壓轉換器輸出電流至8A。它的設計允許操作電源電壓范圍從9V到42V。外部關閉功能可以通過邏輯電平來控制COMP/EN引腳下降&#xff0c;然后進入待機模式。外部補償使反饋控制具有良好的線路和負載調節&#xff0c;外部設計靈活。PC8250在CC&#xff08;恒定…

【讀懂AUTOSAR規范】PduR 緩存分配(Buffer allocation)

1. 前言 PDU路由器模塊支持將I-PDU從一個源總線網關到一個或多個目標總線。與從/到本地模塊的傳輸和接收不同,PDU路由器模塊必須同時充當接收器和發射器,并且在某些情況下還提供I-PDU的緩沖。網關需求被有意地分離,以便在不需要網關的情況下高效實現PDU路由器模塊。如果PDU…

華三無線控制器WX2540H配合準入做Portal認證

數據通信 - 建設篇 - 無線 第四章 華三無線控制器WX2540H配合準入做Portal認證 數據通信 - 建設篇 - 無線系列文章回顧華三無線控制器WX2540H配合準入做Portal認證前言其他配置優化參考來源系列文章回顧 第一章 華三無線控制器配置本地轉發 第二章 華三無線控制器配置802.1X認…

Redis-Day1基礎篇(初識Redis, Redis常見命令, Redis的Java客戶端)

Redis-Day1基礎篇 初識Redis認識NoSQL認識Redis安裝Redis啟動RedisRedis客戶端 Redis命令數據結構介紹通用命令操作命令StringHashListSetSortedSet Redis的Java客戶端客戶端對比Jedis客戶端Jedis快速入門Jedis連接池 SpringDataRedis客戶端SpringDataRedis概述SpringDataRedis…

boardmix AI思維導圖,一鍵自動生成思維導圖!

在日常學習和工作中&#xff0c;我們常常需要記憶和整理大量的知識點和思維結構。 此時&#xff0c;思維導圖的存在就大大方便了我們的工作。與傳統的文本筆記不同&#xff0c;思維導圖可以結合文字、圖像、顏色等多種元素&#xff0c;幫助我們更好地整理和分析知識的關系&…

centos7上用docker部署redis

1. 下載redis鏡像 docker pull redis docker images # 查看鏡像是否下載成功2. 安裝redis容器 2.1 先準備好配置文件redis.conf vi /data/redis/redis.conf寫入配置信息&#xff0c;appendonly yes&#xff0c;如果需要給redis配置密碼&#xff0c;可以寫入requirepass root…

如何選擇更快更穩定的存儲服務器

如何選擇更快更穩定的存儲服務器 存儲介質&#xff1a;存儲服務器的主要存儲介質包括固態硬盤&#xff08;SSD&#xff09;和機械硬盤&#xff08;HDD&#xff09;。相比于機械硬盤&#xff0c;固態硬盤具有更高的讀寫速度和更低的延遲&#xff0c;因此能夠提供更快的數據傳輸…

python安裝的記錄

python setup.py install --user

(附程序)AD采集中的10種經典軟件濾波程序優缺點分析

前言 本次我們學習一下AD采集的一些簡單的軟件濾波算法并分析優缺點 本篇博客大部分是自己收集和整理&#xff0c;如有侵權請聯系我刪除。 AD采樣點的電壓多少有點起伏波動&#xff0c;經運放放大后電壓的波動如果超過ADC的分辯率&#xff0c;則顯示的值會出現波動。波動如…

RTOS的任務觸發底層邏輯

&#xff08;定時器用于計時和觸發事件&#xff0c;任務則由調度器進行調度和執行&#xff1a;每當時鐘節拍到達時&#xff0c;系統會觸發一個稱為 tick 中斷的事件。當 tick 中斷發生時&#xff0c;操作系統會在中斷服務例程中執行一定的處理&#xff0c;其中包括更新任務的運…

C++算法入門練習——相同的二叉查找樹

將第一組n?個互不相同的正整數先后插入到一棵空的二叉查找樹中&#xff0c;得到二叉查找樹T1?&#xff1b;再將第二組n個互不相同的正整數先后插入到一棵空的二叉查找樹中&#xff0c;得到二叉查找樹T2?。判斷T1?和T2??是否是同一棵二叉查找樹。 二叉查找(搜索)樹定義&am…

Halcon學習筆記

目錄 一.簡介 一.簡介 Halcon和OpenCV在工業應用中的區別&#xff1a; OpenCV的精度沒Halcon高&#xff1b;OpenCV沒有模板匹配&#xff0c;Halcon有&#xff0c;而且Halcon匹配的精度更高。

DALSA.SaperaLT.SapClassBasic無法加載,試圖加載格式不正確的程序,c#

情景&#xff1a;用c#wpf寫DALSA線掃相機的項目&#xff0c;生成時不報錯&#xff0c;運行到DALSA相關的代碼就報錯找不到dll&#xff08;DALSA的技術支持沒給到任何支持 &#xff09; 一.根據框架選擇dll 如果是.net framework框架&#xff08;比如說.net480&#xff09;&am…

一份全面「梳理LLM幻覺問題」的綜述

文章目錄 一文全面梳理「LLM 幻覺問題」1. 幻覺的分類2. 幻覺的來源2.1 幻覺來自數據2.2 幻覺來自訓練2.3 幻覺來自生成/推理 3. 幻覺的檢測3.1 事實性幻覺的檢測3.2 忠實性幻覺的檢測 4. 幻覺的評估5. 幻覺的解決 一文全面梳理「LLM 幻覺問題」 相信大家在使用ChatGPT或者其他…