[英]How to configure a Kafka topic for use as snapshot store
該主題應僅對每個X保留最新的“文檔X更新”事件。但是我無法正確配置該主題,並且該主題保留了多個副本。
我的想法是保持段較小,以及所有相關的超時,刷新和保留時間。
主題設置(我對每個選項的應用位置和前綴沒有足夠的了解,因此可能有幾個未使用和不相關的選項以及過大的數字-歡迎更正):
"cleanup.policy" -> "compact",
"file.delete.delay.ms" -> "10",
"segment.bytes" -> "10000",
"delete.retention.ms" -> "10",
"retention.bytes" -> "10000",
"segment.ms" -> "10",
"retention.ms" -> "10",
"min.cleanable.dirty.ratio" -> "0.001",
"flush.messages" -> "1",
"flush.ms" -> "10",
"min.compaction.lag.ms" -> "1",
"log.cleaner.min.compaction.lag.ms" -> "1"
我用akka-streams-kafka喂這個話題:
val ids = List("12345", ...)
val publish: Future[Done] = Source(ids ++ ids ++ ids ++ ids ++ ids)
.map { id =>
ProducerMessage.Message(new ProducerRecord[String, String](topic, id, id), id)
}
.via(producerFlow)
.map(logResult)
.runWith(Sink.ignore)
Await.result(publish, 3.seconds)
等待幾秒鍾后,我計算了以下消息:
var count = 0
val runCount = Consumer
.plainSource(consumerSettings, Subscriptions.topics(topic))
.map { t =>
count += 1
t
}
.runWith(Sink.ignore)
Try { Await.result(runCount, timeout) }
我希望使用者收到ids.length
消息,但是它總是在第一次運行時接收所有產生的消息,在以后的運行中甚至接收更多的消息。
確實進行了一些壓縮-如果我多次運行測試,消耗的消息數將停止增長,並且在kafka日志中看到段刪除-但是每個鍵仍然有多條消息。
如何將kafka主題用作快照存儲?
使用kafka 0.10.2.1
謝謝。
根據Kafka的規范:“日志壓縮可確保Kafka始終為單個主題分區的數據日志保留至少每個消息密鑰的最后一個已知值”。 即卡夫卡(Ie Kafka)不保證每個密鑰僅保留一條消息,但是可以保證每個密鑰始終具有最新消息版本。
你可以嘗試的工作與周圍的配置看,如果你想就可以實現什么(請參閱本 ),但我會建議在應用程序級別來處理它,只使用與該鍵為有效消息的最新消息,因為日志壓實運行在單獨的線程上,並且沒有辦法在每次更新后觸發它發生(即使有辦法,它也不是很有效)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.