中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

kafka-console-consumer.sh使用2次grep管道無法提取消息如何解決

發布時間:2023-03-07 10:24:09 來源:億速云 閱讀:143 作者:iii 欄目:開發技術

這篇文章主要講解了“kafka-console-consumer.sh使用2次grep管道無法提取消息如何解決”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“kafka-console-consumer.sh使用2次grep管道無法提取消息如何解決”吧!

    問題

    在使用kafka自帶腳本消費時,想用grep關鍵詞過濾出來想要的信息

    ./kafka-console-consumer.sh \
    --bootstrap-server node1:9092,node2:9092,node3:9092 \
    --topic test \
    --from-beginning \
    --consumer-property group.id=gaofeng_test\
     | grep  "b786aba6f3a6" | grep 388aabd

    但是發現grep命令在這里有問題,無法取到想要消息


    kafka-console-consumer.sh使用2次grep管道無法提取消息如何解決

    已經消費到latest了,都沒有提取到想要的msg

    這里確認了producer端已經發送成功了,回調函數里都沒有任何異常

    懷疑

    懷疑是否kafka存在丟數據的情況

    排查問題后發現kafka集群一切正常,性能也很強勁

    并且在存儲消息的日志文件中也已經查詢到了我想要的消息了,為什么就是消費不出來呢

    分析

    將kafka的這個主題 --from-beginning 消費到文件topic.log中去

    對topic.log這個靜態文件進行grep “b786aba6f3a6” | grep 388aabd抽取,發現取到了自己想要的這條消息

    kafka消費時結果是動態的,grep這里用法不對,只有對靜態的文件可以抽取到數據

    --line-buffered
             Force output to be line buffered.  By default, output is line buffered when standard output is
             a terminal and block buffered otherwise

    上面的意思是

    • 強制輸出結果使用行緩沖

    • 默認情況下,如果標準輸入時終端,則使用line bufferred

    • 否則,使用塊緩沖,(默認的大小為4096 bytes,因系統和配置而異)

    所以,這也就解釋了為什么雙重grep過濾沒有內容,因為沒有達到塊緩沖限制。

    驗證

    生產消息

    a,b,c

    kafka-console-consumer.sh使用2次grep管道無法提取消息如何解決

    消費時兩次grep則無消息

    kafka-console-consumer.sh使用2次grep管道無法提取消息如何解決

    消費時一次grep則都出來

    kafka-console-consumer.sh使用2次grep管道無法提取消息如何解決

    結論

    • 剛剛/kafka-console-consumer.sh第一次grep過濾出來的的消息小于4k了,所以傳給第二次grep是不可以直接輸出出來的,因為在緩沖區

    • 如果第一次grep出來的數據大于4k,傳給第二個grep時則不會緩沖著,第二個grep收到就立刻傳入到terminal輸出了

    • 反之第一次grep過濾出來的的消息大于還是小于4k,一旦后面沒有管道符號,直接輸出給terminal的話,則遵循line bufferred規則立馬輸出

    解決

    使用如下命令即可

    ./kafka-console-consumer.sh \
    --bootstrap-server node1:9092,node2:9092,node3:9092 \
    --topic test \
    --from-beginning \
    --consumer-property group.id=gaofeng_test\
     | grep --line-buffered "b786aba6f3a6" | grep 388aabd

    【注意】

    這里用了grep 的 --line-buffered參數

    感謝各位的閱讀,以上就是“kafka-console-consumer.sh使用2次grep管道無法提取消息如何解決”的內容了,經過本文的學習后,相信大家對kafka-console-consumer.sh使用2次grep管道無法提取消息如何解決這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    民丰县| 泰顺县| 鄂州市| 姜堰市| 东乡族自治县| 莲花县| 清镇市| 鞍山市| 鄂州市| 勃利县| 北宁市| 兴隆县| 子洲县| 汝南县| 桃园县| 定日县| 靖江市| 临沧市| 闸北区| 丹凤县| 黄浦区| 眉山市| 霍州市| 盈江县| 土默特左旗| 宁南县| 平谷区| 绥化市| 武夷山市| 武胜县| 辽宁省| 嘉祥县| 九龙县| 若尔盖县| 突泉县| 铅山县| 南漳县| 泰州市| 天津市| 延庆县| 澄迈县|