После нескольких неудачных попыток я смог удалить записи в kafka, используя сообщения-захоронения. Однако алгоритм (или логика c), который использует Кафка для удаления этих надгробных сообщений, мне до сих пор неясен.
Из моих наблюдений я мог бы выяснить, что существует некоторая связь между последним измененным временем сегмента и удаление надгробных сообщений. Я изучил это { ссылка }, но это немного сложно понять.
Топи c детали
Topic:reddyvel_13 PartitionCount:1 ReplicationFactor:3 Configs:cleanup.policy=compact,segment.bytes=2000000,delete.retention.ms=10000
Topic: reddyvel_13 Partition: 0 Leader: 1 Replicas: 1,5,2 Isr: 1,5,2
У меня есть set cleanup.policy=compact
, segment.bytes=2000000
, delete.retention.ms=10000
Хронология событий
- Первый сегмент (baseOffset = 0) был закрыт в
2020-04-02 07:12:09,908
[2020-04-02 07:12:09,908] INFO [ProducerStateManager partition=reddyvel_13-0] Writing producer snapshot at offset 16623 (kafka.log.ProducerStateManager)
[2020-04-02 07:12:09,908] INFO [Log partition=reddyvel_13-0, dir=/local/kafka/data] Rolled new log segment at offset 16623 in 1 ms. (kafka.log.Log)
Сжатие было немедленно запущено в этом закрытом сегменте
[2020-04-02 07:12:22,989] INFO Cleaner 0: Cleaning log reddyvel_13-0 (cleaning prior to Thu Apr 02 07:12:09 EDT 2020, discarding tombstones prior to Wed Dec 31 19:00:00 EST 1969)... (kafka.l
og.LogCleaner)
- Отправлено еще несколько сообщений вместе с несколькими надгробиями (для удаления сообщений, присутствующих в первом сегменте) и Второй сегмент был закрыт в
2020-04-02 07:56:50,405
[2020-04-02 07:56:50,405] INFO [ProducerStateManager partition=reddyvel_13-0] Writing producer snapshot at offset 33868 (kafka.log.ProducerStateManager)
[2020-04-02 07:56:50,406] INFO [Log partition=reddyvel_13-0, dir=/local/kafka/data] Rolled new log segment at offset 33868 in 2 ms. (kafka.log.Log)
Сжатие было запущено
[2020-04-02 07:56:53,180] INFO Cleaner 0: Cleaning log reddyvel_13-0 (cleaning prior to Thu Apr 02 07:56:50 EDT 2020, discarding tombstones prior to Thu Apr 02 07:11:59 EDT 2020)... (kafka.l
og.LogCleaner)
Здесь, выше, в сообщении журнала указано discarding tombstones prior to Thu Apr 02 07:11:59 EDT 2020
. Эта временная метка точно равна первой метке времени закрытия сегмента (2020-04-02 07:12:09,908
) - delete.retention.ms
(10 секунд) моей топи c. Я не могу выяснить связь между ними.
Может кто-нибудь объяснить алгоритм удаления захоронения в более простых терминах и причины этого?
Заранее спасибо.