2015-12-15 58 views
1

我已經在卡夫卡0.8.1.1中的server.properties文件中進行了更改,即添加了log.cleaner.enable=true,並在創建主題時啓用了cleanup.policy=compact。 現在,當我測試它時,我將以下消息(密鑰,消息)推送到主題。如何測試日誌壓縮是否在卡夫卡工作?

  • 偏移:1-(123,abc);
  • 偏移量:2 - (234,def);
  • 抵消:3 - (345,ghi);
  • 偏移:4 - (123,改變)

現在我把第四消息具有相同的密鑰作爲較早的輸入,但改變了消息。這裏日誌壓縮應該進入圖片。通過使用Kafka工具,我可以看到主題中的所有4個偏移量。我怎麼知道日誌壓縮是否工作?如果先前的消息被刪除,或者日誌壓縮在新消息被推送時正常工作。 是否必須對或topic.log.retention.hourslog.retention.size配置做任何事情?這些配置在日誌壓縮中的作用是什麼。 P.S. - 我徹底瀏覽了Apache文檔,但仍然不清楚。

回答

1

實際上,日誌壓縮僅在日誌數量達到非常高的數量時纔可見,例如100萬。所以,如果你有這麼多的數據,那很好。否則,使用配置更改,可以將此限制減少爲100條消息,然後可以看到具有相同密鑰的消息中只有最新的消息將在那裏,而前一個消息將被刪除。如果您每次都有完整的數據快照,則最好使用日誌壓縮,否則可能會使用相同的關聯密鑰丟失先前的日誌,這可能很有用。

+0

這怎麼能通過Kafka提供的命令行工具完成? – robbmj

1

即使這個問題是幾個月前,我剛剛碰到它爲我自己的問題做研究。我創造了一個小例子,對於看到壓實如何與Java的工作,也許這有助於您太:

https://gist.github.com/anonymous/f78184eaeec3ee82b15182aec24a432a

此外,諮詢文件,我用一個主題級別以下配置壓實踢在儘可能快地:

min.cleanable.dirty.ratio=0.01 
cleanup.policy=compact 
segment.ms=100 
delete.retention.ms=100 

運行時,該類表明,壓實工作 - 只有永遠一個與主題相同的密鑰信息。

使用適當的設置,這可以在命令行上重現。

+0

如果你沒有填寫最後1個'segment'(Topic-> Partition-> Segment),那麼我會加入這一點,不會發生壓縮。假設segment.ms = 100,並且在測試的前100ms內寫入<'segement.bytes = 1GB',那麼您將只有1個段,並且數據不會被壓縮。要麼確保在比'segment.ms'更長的時間段內寫入同一分區或設置'segment。字節「設置爲較低的值,這樣並不是所有數據都適合1段。 –

0

看一下log.roll.hours也是一個不錯的觀點,默認情況下它是168小時。簡而言之:即使您沒有如此活躍的主題,並且您無法在一週內填充最大細分受衆羣規模(默認情況下爲正常主題1G,偏移主題爲100M),您將獲得大小小於日誌的封閉細分受衆羣.segment.bytes。這部分可以在下一回合壓縮。