выключили свет и весь kafka-кластер упал, а после поднятия кластера часть сообщений из топика была удалена.
По логам приложений мы видим, что эти сообщения были запаблишены в kafka (продьюсер получили ack), консьюмеры их прочитали, но после поднятия кластера сообщений в kafka уже не было 🙁
Кластер из 3 нод собран в конфигурации:
default.replication.factor=3
auto.leader.rebalance.enable=False
unclean.leader.election.enable=False
min.insync.replicas=2
По дефолту лидером всегда выбирается 1 нода.
Продьюсер всегда паблишит с ack=all
При поднятии в логах на 1 ноде есть след.:
[2020-04-02 16:12:40,892] INFO [Log partition=topic-0, dir=/kafka-data] Recovering unflushed segment 65564239 (kafka.log.Log)
[2020-04-02 16:12:40,892] INFO [Log partition=topic-0, dir=/kafka-data] Loading producer state till offset 65564239 with message format version 2 (kafka.log.Log)
[2020-04-02 16:12:40,893] INFO [ProducerStateManager partition=topic-0] Loading producer state from snapshot file '/kafka-data/topic-0/00000000000065564239.snapshot' (kafka.log.ProducerStateManager)
[2020-04-02 16:12:43,614] INFO [ProducerStateManager partition=topic-0] Writing producer snapshot at offset 66815821 (kafka.log.ProducerStateManager)
[2020-04-02 16:12:43,614] WARN [Log partition=topic-0, dir=/kafka-data] Corruption found in segment 65564239, truncating to offset 66815821 (kafka.log.Log)
[2020-04-02 16:12:43,662] INFO [Log partition=topic-0, dir=/kafka-data] Loading producer state till offset 66815821 with message format version 2 (kafka.log.Log)
[2020-04-02 16:12:43,664] INFO [ProducerStateManager partition=topic-0] Loading producer state from snapshot file '/kafka-data/topic-0/00000000000066815821.snapshot' (kafka.log.ProducerStateManager)
[2020-04-02 16:12:43,664] INFO [Log partition=topic-0, dir=/kafka-data] Completed load of log with 40 segments, log start offset 0 and log end offset 66815821 in 2778 ms (kafka.log.Log)
...
[2020-04-02 16:12:54,822] INFO [Log partition=topic-0, dir=/kafka-data] Truncating to offset 66815804 (kafka.log.Log)
[2020-04-02 16:12:54,827] INFO [Log partition=topic-0, dir=/kafka-data] Loading producer state till offset 66815804 with message format version 2 (kafka.log.Log)
[2020-04-02 16:12:54,829] INFO [ProducerStateManager partition=topic-0] Loading producer state from snapshot file '/kafka-data/topic-0/00000000000065564239.snapshot' (kafka.log.ProducerStateManager)
[2020-04-02 16:12:54,829] INFO [ProducerStateManager partition=topic-0] Writing producer snapshot at offset 66815804 (kafka.log.ProducerStateManager)
[2020-04-02 16:12:54,857] WARN [ReplicaFetcher replicaId=1, leaderId=3, fetcherId=0] Truncating topic-0 to offset 66815804 below high watermark 66815819 (kafka.server.ReplicaFetcherThread)
То есть получается лидером стала 3 нода и почему-то удалила по ее мнению "лишние" данные.
Собственно вопрос, как можно в будущем избежать таких вот удалений?
По этой проблеме ни у кого нет соображений ? Интересный топик.
Обсуждают сегодня