【💊 Python的解憂錦囊】kafka訊息量太大、queue竟然是空的?

閱讀時間約 3 分鐘

情境描述

我們在「🔒 阿Han的軟體心法實戰營 - kafka」有關於kafka的教學文章, 那麼在開發過程中我們遇到了 👻 詭異事件, 那就是我們嘗試在做一個檔案串流時, 發現Producer明明傳送了大約16MB檔案大小的封包到kafka, 每一包約(1024 * 1024 ) bytes, 但奇怪的是kafka的查詢介面裡卻只有發現到大約 953KB的訊息…, 照理來說應該要有10幾包才對呀!

程式碼片段

我們透過open file 來讀取檔案並且設定一包讀取 1024 * 1024 bytes大小的封包送到kafka, 就以程式碼來看完全沒有錯誤呀! 怎麼會沒有訊息咧?


bootstrap_servers = ["localhost:9092"]
topic_name = "file-stream"
chunk_size = 1024 * 1024 # 1 MB
def send_file(filename):
# Create a producer
producer = kafka.KafkaProducer(bootstrap_servers=bootstrap_servers)

# Read the file in chunks
with open(filename, "rb") as f:
while True:
# Read a chunk of data from the file
chunk = f.read(chunk_size)

# If the chunk is empty, break the loop
if not chunk:
break

print(f"send: {len(chunk)}")
# Send the chunk to Kafka
producer.send(topic_name, key=bytes(filename, 'utf-8'), value=chunk)

# Flush the producer to ensure all messages are sent
producer.flush()

問題釐清思路

raw-image


  1. 我們試著讀第一包並break跳出, 觀察看看, 發現一樣沒有訊息。
  2. 我們試著將chunk_size設定成1024 bytes, 結果有訊息。
  3. 十有八九就是訊息量太大了…
  4. 接著我們就試著問問Gemini, 怎麼問會比較好歡迎參考「【Prompt Engineering 提示工程】Ep.1 什麼是Prompt Engineering?」,
    1. Q: 請問kafka為什麼送超過1MB大小的訊息就被阻擋?
    2. A: Kafka 默認將訊息大小限制在 1MB 以內。

原因

Kafka 主題中每個訊息的預設限制為 1MB,這是因為非常大的消息被認為是低效的。

怎麼解決?

  1. 將封包切於10MB以內: 較佳解, 因為減少傳遞封包的耗損。
  2. 透過建立topic時設定大小, 詳細請參考:How to send Large Messages in Apache Kafka?

結語

原來kafka很多背景知識需要了解, 常常我們會在實作的過程中慢慢發現, 就讓我們一步步探索kafka的奧妙吧! 也歡迎訂閱「🔒 阿Han的軟體心法實戰營」一起學習軟體相關的知識與疑難雜症。

114會員
256內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
發表第一個留言支持創作者!
阿Han的沙龍 的其他內容
更快、更短、更即時是串流傳輸必要的元素, 而我們常常在使用Python請求API時都是等待式回應, 也就是一個請求過去之後, 待對方處理完畢後再行回應, 但假設需要下載的檔案、內容非常大時, 是不是使用者只能傻傻的等待整個傳輸結束後才能顯示? 這樣的使用者體驗也實在太糟糕了, 對於使用者來說除了完全
情況描述 我們在「【🔒 Python 先修班】教你親手打包專屬套件庫的手作課(pip install…)」有提到如何打包Python讓自己的程式變成套件, 讓其他人可以用pip install的方式進行安裝,😲 But… 我們實際上打包後, 發現到引用的檔案都有被打包進去,但目錄卻未被打包
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」有分享 FastAPI 這套API框架, 那麼當我們想要在應用程式剛執行時就註冊一些事件或者共享GPU運算模型、變數…等,當整個應用程式關閉時也進行釋放作業, 這樣的一個週期循環就是所謂的生命週期, 而在FastAPI這
當我們在開發一個AI應用服務時, 常常會需要載入大模型, But… 我們總不可能每一次的請求就載入一次模型吧! 這樣太沒有效率了, 也非常的浪費資源, 因此我們通常會希望應用程式啟動時就能夠載入模型, 之後每一次的請求只要讓模型進行運算即可, 那麼在FastAPI的框架中究竟要如何使用呢? 首
使用Python開發後端API的經驗中應該會常常看到WSGI與ASGI這兩個名詞, 兩者的差異究竟是什麼呢? 就讓我們來為您科普一番。 什麼是WSGI 全名為「Web Server Gateway Interface」 Web伺服器閘道介面,主要規範HTTP請求如何與伺服器溝通, 通
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
更快、更短、更即時是串流傳輸必要的元素, 而我們常常在使用Python請求API時都是等待式回應, 也就是一個請求過去之後, 待對方處理完畢後再行回應, 但假設需要下載的檔案、內容非常大時, 是不是使用者只能傻傻的等待整個傳輸結束後才能顯示? 這樣的使用者體驗也實在太糟糕了, 對於使用者來說除了完全
情況描述 我們在「【🔒 Python 先修班】教你親手打包專屬套件庫的手作課(pip install…)」有提到如何打包Python讓自己的程式變成套件, 讓其他人可以用pip install的方式進行安裝,😲 But… 我們實際上打包後, 發現到引用的檔案都有被打包進去,但目錄卻未被打包
我們在「【🔒 Python API框架篇 - FastAPI】Ep.1 啟航」有分享 FastAPI 這套API框架, 那麼當我們想要在應用程式剛執行時就註冊一些事件或者共享GPU運算模型、變數…等,當整個應用程式關閉時也進行釋放作業, 這樣的一個週期循環就是所謂的生命週期, 而在FastAPI這
當我們在開發一個AI應用服務時, 常常會需要載入大模型, But… 我們總不可能每一次的請求就載入一次模型吧! 這樣太沒有效率了, 也非常的浪費資源, 因此我們通常會希望應用程式啟動時就能夠載入模型, 之後每一次的請求只要讓模型進行運算即可, 那麼在FastAPI的框架中究竟要如何使用呢? 首
使用Python開發後端API的經驗中應該會常常看到WSGI與ASGI這兩個名詞, 兩者的差異究竟是什麼呢? 就讓我們來為您科普一番。 什麼是WSGI 全名為「Web Server Gateway Interface」 Web伺服器閘道介面,主要規範HTTP請求如何與伺服器溝通, 通
當我們在撰寫一套系統的時候, 總是會提供一個介面讓使用者來觸發功能模組並回傳使用者所需的請求, 而傳統的安裝包模式總是太侷限, 需要個別主機獨立安裝, 相當繁瑣, 但隨著時代的演進與互聯網的崛起, 大部分的工作都可以藉由網頁端、裝置端來觸發, 而伺服端則是負責接收指令、運算與回傳結果, 雲端
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
有時候在使用數學運算時,會出現一些看似反直覺的結果。 這些錯誤可能是由於我們對於數學規則的誤解或者忽略了一些細節所導致的。 以下是一些 Python 的例子: 除餘數 例如負數求餘數。 假設-15 % 90 狀況下 會下意思覺得結果還是 -15 但輸出的結果是 75。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
維生素是維持身體正常運作所不可或缺的元素,讓我們一同揭密維生素的奧秘。
Thumbnail
在現代醫學中,抗生素扮演著重要的角色,對抗細菌感染、保護我們的身體健康。然而,正確使用抗生素是保護自己和社會免受抗藥性影響的關鍵。一起來了解抗生素的基本知識,從使用時機到副作用,提供您全方位的了解。 💡
Thumbnail
經濟是國家的命脈,社稷重點無可厚非,國際情勢不好、經濟危機出現時,國家資源救市,穩定法人、投資人信心,維持正常的金融機轉,讓國家度過危機,👍值得嘉許,只是這次國安基金護盤的故事,讓人百般尋味。 台股去年創下18650破紀錄新高,隨著國際局勢一起回檔,國安基金決定進場護盤: 第一:當時股市萬八,不是
Thumbnail
在最近動盪的銀行冒險記裡,開始出現銀行倒閉的新聞,或是接近倒閉被接管,💣一個個炸彈,在主政者的輔助下,細細呵護的灌溉、包紮,給予營養補給,🇺🇸美洲的銀行危機,暫時告一段落。 後來出現了另一個危機,CS瑞士信貸,不是CS絕對武力,Credit Suisse,規模同比有過之而無不及,好像一顆加大的
Thumbnail
這一年來,得到最大的收穫就是「做自己」! 最浪費時間的事是什麼呢?就是拿自己和別人比較🥹 嘿親愛的,我們都是獨特且美麗的存在❤️
Thumbnail
今天的領受是在上個禮拜每週五都會去上的照顧者關懷工作坊, 課中領受到的!! (哈哈只剩下禮拜最後一堂課了) 感謝主也可以給我些思考, 和這個領受❤️🤗 這週應該算是課堂裡 塞最多內容的一課了, 哈哈我後來都有點精神渙散想睡了🤣 辛苦老師了!!! 主要講到兩個主題: 步向正面思考、一些用藥知識 和
Thumbnail
第一家公司產品的由專業團隊設計和研發的,因此品質得到保證。提供豐富的資源,包括在線健康諮詢服務和健康資訊,幫助顧客了解如何使用產品和實現健康目標。該公司的產品具有良好的可負擔性。通過線上購買,顧客可以輕鬆訂購所需的產品,並且該公司的價格也相對實惠。
《女性性需求第一定律》 為什麼有些女生總是會把性行為這件事無限往後延? 今天史提將從紅藥丸演化博弈心理學的角度 ,來探討一下這個問題🤨 想像你是一個妹子,有一個男的每天照三餐都會給妳鮮花素果🍉🍑🥝因為他想追妳,妳能有的選項: 1.跟他交往並啪啪啪🤨 2.不跟他交往也不啪啪啪🤔 = ;
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
有時候在使用數學運算時,會出現一些看似反直覺的結果。 這些錯誤可能是由於我們對於數學規則的誤解或者忽略了一些細節所導致的。 以下是一些 Python 的例子: 除餘數 例如負數求餘數。 假設-15 % 90 狀況下 會下意思覺得結果還是 -15 但輸出的結果是 75。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
維生素是維持身體正常運作所不可或缺的元素,讓我們一同揭密維生素的奧秘。
Thumbnail
在現代醫學中,抗生素扮演著重要的角色,對抗細菌感染、保護我們的身體健康。然而,正確使用抗生素是保護自己和社會免受抗藥性影響的關鍵。一起來了解抗生素的基本知識,從使用時機到副作用,提供您全方位的了解。 💡
Thumbnail
經濟是國家的命脈,社稷重點無可厚非,國際情勢不好、經濟危機出現時,國家資源救市,穩定法人、投資人信心,維持正常的金融機轉,讓國家度過危機,👍值得嘉許,只是這次國安基金護盤的故事,讓人百般尋味。 台股去年創下18650破紀錄新高,隨著國際局勢一起回檔,國安基金決定進場護盤: 第一:當時股市萬八,不是
Thumbnail
在最近動盪的銀行冒險記裡,開始出現銀行倒閉的新聞,或是接近倒閉被接管,💣一個個炸彈,在主政者的輔助下,細細呵護的灌溉、包紮,給予營養補給,🇺🇸美洲的銀行危機,暫時告一段落。 後來出現了另一個危機,CS瑞士信貸,不是CS絕對武力,Credit Suisse,規模同比有過之而無不及,好像一顆加大的
Thumbnail
這一年來,得到最大的收穫就是「做自己」! 最浪費時間的事是什麼呢?就是拿自己和別人比較🥹 嘿親愛的,我們都是獨特且美麗的存在❤️
Thumbnail
今天的領受是在上個禮拜每週五都會去上的照顧者關懷工作坊, 課中領受到的!! (哈哈只剩下禮拜最後一堂課了) 感謝主也可以給我些思考, 和這個領受❤️🤗 這週應該算是課堂裡 塞最多內容的一課了, 哈哈我後來都有點精神渙散想睡了🤣 辛苦老師了!!! 主要講到兩個主題: 步向正面思考、一些用藥知識 和
Thumbnail
第一家公司產品的由專業團隊設計和研發的,因此品質得到保證。提供豐富的資源,包括在線健康諮詢服務和健康資訊,幫助顧客了解如何使用產品和實現健康目標。該公司的產品具有良好的可負擔性。通過線上購買,顧客可以輕鬆訂購所需的產品,並且該公司的價格也相對實惠。
《女性性需求第一定律》 為什麼有些女生總是會把性行為這件事無限往後延? 今天史提將從紅藥丸演化博弈心理學的角度 ,來探討一下這個問題🤨 想像你是一個妹子,有一個男的每天照三餐都會給妳鮮花素果🍉🍑🥝因為他想追妳,妳能有的選項: 1.跟他交往並啪啪啪🤨 2.不跟他交往也不啪啪啪🤔 = ;