Слишком частая ротация журналов для темы перераспределения приводит к нехватке памяти на машине, на которой запущен kafka - PullRequest
0 голосов
/ 16 октября 2019

Тема перераспределения заключается в том, что журналы чередуются слишком быстро, и мы совершенно уверены, что это приводит к тому, что машине не хватает памяти. Это происходит, когда мы повторно обрабатываем тему с большим количеством сообщений, когда мы обновили некоторую часть нашего потокового приложения, которое требует повторной обработки. Тема ввода содержит сообщения с отметками времени до двух лет назад.

Это работало со старой версией потоков (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 дней, и он должен работать и с еще более короткими сегментами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...