Тема перераспределения заключается в том, что журналы чередуются слишком быстро, и мы совершенно уверены, что это приводит к тому, что машине не хватает памяти. Это происходит, когда мы повторно обрабатываем тему с большим количеством сообщений, когда мы обновили некоторую часть нашего потокового приложения, которое требует повторной обработки. Тема ввода содержит сообщения с отметками времени до двух лет назад.
Это работало со старой версией потоков (1.0.1), но тогда темы перераспределения не будут очищены достаточно быстро.
Настройки темы:
kafka-topics.sh --topic my_state_store-repartition --describe
Topic:my_state_store-repartition PartitionCount:1 ReplicationFactor:1 Configs:segment.bytes=52428800,retention.ms=9223372036854775807,segment.index.bytes=52428800,cleanup.policy=delete,segment.ms=600000
Topic: my_state_store-repartition Partition: 0 Leader: 1001 Replicas: 1001 Isr: 1001
Кафка лог |tail:
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000100560000, 131072, 0) failed; error='Out of memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 131072 bytes for committing reserved memory.
# An error report file with more information is saved as:
# //hs_err_pid1.log
В одной из папок журналов репарта состояний хранится состояние.
ubuntu@ip-172-31-20-159:~$ sudo ls -l -h /var/lib/docker/volumes/<volumeId>/_data/kafka-logs/my_state_store-repartition-0 |tail -n100
-rw-r--r-- 1 root root 16K Oct 9 13:43 00000000000011873778.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011873778.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011873778.timeindex
-rw-r--r-- 1 root root 16 Oct 9 13:43 00000000000011873788.index
-rw-r--r-- 1 root root 46K Oct 9 13:43 00000000000011873788.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011873788.snapshot
-rw-r--r-- 1 root root 24 Oct 9 13:43 00000000000011873788.timeindex
-rw-r--r-- 1 root root 0 Oct 9 13:43 00000000000011873814.index
-rw-r--r-- 1 root root 16K Oct 9 13:43 00000000000011873814.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011873814.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011873814.timeindex
-rw-r--r-- 1 root root 16 Oct 9 13:43 00000000000011873821.index
-rw-r--r-- 1 root root 45K Oct 9 13:43 00000000000011873821.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011873821.snapshot
-rw-r--r-- 1 root root 24 Oct 9 13:43 00000000000011873821.timeindex
-rw-r--r-- 1 root root 16 Oct 9 13:43 00000000000011873846.index
-rw-r--r-- 1 root root 46K Oct 9 13:43 00000000000011873846.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011873846.snapshot
-rw-r--r-- 1 root root 24 Oct 9 13:43 00000000000011873846.timeindex
-rw-r--r-- 1 root root 0 Oct 9 13:43 00000000000011873873.index
-rw-r--r-- 1 root root 16K Oct 9 13:43 00000000000011873873.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011873873.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011873873.timeindex
-rw-r--r-- 1 root root 0 Oct 9 13:43 00000000000011873881.index
-rw-r--r-- 1 root root 16K Oct 9 13:43 00000000000011873881.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011873881.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011873881.timeindex
-rw-r--r-- 1 root root 0 Oct 9 13:43 00000000000011873890.index
-rw-r--r-- 1 root root 15K Oct 9 13:43 00000000000011873890.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011873890.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011873890.timeindex
-rw-r--r-- 1 root root 0 Oct 9 13:43 00000000000011873899.index
-rw-r--r-- 1 root root 16K Oct 9 13:43 00000000000011873899.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011873899.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011873899.timeindex
-rw-r--r-- 1 root root 0 Oct 9 13:43 00000000000011873908.index
-rw-r--r-- 1 root root 15K Oct 9 13:43 00000000000011873908.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011873908.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011873908.timeindex
-rw-r--r-- 1 root root 0 Oct 9 13:43 00000000000011873917.index
-rw-r--r-- 1 root root 16K Oct 9 13:43 00000000000011873917.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011873917.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011873917.timeindex
-rw-r--r-- 1 root root 0 Oct 9 13:43 00000000000011873927.index
-rw-r--r-- 1 root root 16K Oct 9 13:43 00000000000011873927.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011873927.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011873927.timeindex
-rw-r--r-- 1 root root 8 Oct 9 13:43 00000000000011873937.index
-rw-r--r-- 1 root root 31K Oct 9 13:43 00000000000011873937.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011873937.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011873937.timeindex
-rw-r--r-- 1 root root 0 Oct 9 13:43 00000000000011873957.index
-rw-r--r-- 1 root root 16K Oct 9 13:43 00000000000011873957.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011873957.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011873957.timeindex
-rw-r--r-- 1 root root 0 Oct 9 13:43 00000000000011873967.index
-rw-r--r-- 1 root root 15K Oct 9 13:43 00000000000011873967.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011873967.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011873967.timeindex
-rw-r--r-- 1 root root 0 Oct 9 13:43 00000000000011873977.index
-rw-r--r-- 1 root root 16K Oct 9 13:43 00000000000011873977.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011873977.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011873977.timeindex
-rw-r--r-- 1 root root 0 Oct 9 13:43 00000000000011873987.index
-rw-r--r-- 1 root root 16K Oct 9 13:43 00000000000011873987.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011873987.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011873987.timeindex
-rw-r--r-- 1 root root 8 Oct 9 13:43 00000000000011873997.index
-rw-r--r-- 1 root root 31K Oct 9 13:43 00000000000011873997.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011873997.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011873997.timeindex
-rw-r--r-- 1 root root 8 Oct 9 13:43 00000000000011874016.index
-rw-r--r-- 1 root root 32K Oct 9 13:43 00000000000011874016.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011874016.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011874016.timeindex
-rw-r--r-- 1 root root 8 Oct 9 13:43 00000000000011874034.index
-rw-r--r-- 1 root root 31K Oct 9 13:43 00000000000011874034.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011874034.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011874034.timeindex
-rw-r--r-- 1 root root 0 Oct 9 13:43 00000000000011874052.index
-rw-r--r-- 1 root root 16K Oct 9 13:43 00000000000011874052.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011874052.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011874052.timeindex
-rw-r--r-- 1 root root 0 Oct 9 13:43 00000000000011874061.index
-rw-r--r-- 1 root root 15K Oct 9 13:43 00000000000011874061.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011874061.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011874061.timeindex
-rw-r--r-- 1 root root 8 Oct 9 13:43 00000000000011874070.index
-rw-r--r-- 1 root root 30K Oct 9 13:43 00000000000011874070.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011874070.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011874070.timeindex
-rw-r--r-- 1 root root 0 Oct 9 13:43 00000000000011874086.index
-rw-r--r-- 1 root root 16K Oct 9 13:43 00000000000011874086.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011874086.snapshot
-rw-r--r-- 1 root root 12 Oct 9 13:43 00000000000011874086.timeindex
-rw-r--r-- 1 root root 50M Oct 9 13:43 00000000000011874095.index
-rw-r--r-- 1 root root 265K Oct 9 13:43 00000000000011874095.log
-rw-r--r-- 1 root root 10 Oct 9 13:43 00000000000011874095.snapshot
-rw-r--r-- 1 root root 50M Oct 9 13:43 00000000000011874095.timeindex
-rw-r--r-- 1 root root 14 Oct 9 13:42 leader-epoch-checkpoint
Проблема связана с параметром сегмент.ms = 600000. Который основан на метке времени, а не на стене. Эта проблема решается при переходе к сегменту3.ms к Long.max (), а затем бросается только тогда, когда сегмент имеет 50 МБ. Тогда возникает вопрос, как поменять настройки разделов перераспределения. Это можно сделать вручную с помощью kafka-topic.sh, но это неустойчиво для множества разных приложений, и их необходимо сбрасывать, когда мы изменяем способ их агрегирования. И из того, что я понимаю, я не могу изменить настройки для разделов темы с kafka-streams? Или, что еще лучше, было бы какое-то минимальное время для предотвращения сегментации или аналогичное?
EDIT1: Похоже, я неправильно понял сегмент.ms, это максимальная разница между временными метками внутри сегмента. (?) Установка егоlong.max немного ненужен, наши проблемы решаются при установке его на 30 дней, и он должен работать и с еще более короткими сегментами.