Комментарии 11
Kafka Streams может умереть и по другой причине: не пойманные исключения в вашем коде.… Второй вариант кажется лучше — совсем не ловить исключение и дать Kafka Streams умереть...
Вот это меня удивляет больше всего — почему они не могут просто откатывать оффсет и репроцесить сообщение, если добавлять счетчик ретраем в метаданные то было бы вообще хорошо. И тогда пользовательский код решал что бы хватит уже ретраить или же продолжаем ретраить пока не подымется база.
А так стримы хороши когда сами в себе :(
особенно если планируете использовать следующий уровень абстракции — KSQL.
А можете поподробнее прокомментировать этот момент? Чем опасен KSQL?
Проблема в том, что такая простота обманчива. Без глубокого понимания, как это работает, она может стать большой проблемой при увеличении нагрузок на систему.
При повышении уровня абстракции всегда приносится в жертву производительность.
В случае с KSQL такая жертва, думаю, будет чересчур велика.
Также уточню, что опыта работы с KSQL в production у нас нет, так что рассуждения выше — это только рассуждения.
Иначе будете неприятно удивлены тем, что при каждом рестарте будет удаляться вся локальная база RocksDB.
А как организована связь RocksDB с разделами темы? На каждый раздел своя база или как-то иначе?
И что происходит, если данных в разделе/теме много и они не помещаются в локальную базу?
И что происходит, если данных в разделе/теме много и они не помещаются в локальную базу?
давайте либо много диска чтобы помещалось либо делаете несколько инстансов на которых бегают стримы и у каждого свой локальный сторадж
Если да, то выглядит это так.
Например, у вас в топике 10 партиций и топик читают две ноды kafka streams.
Каждая нода берёт себе по 5 партиций. Соответственно у каждой ноды в её локальной базе RocksDB будут данные только с этих 5 партиций.
При условии, что ноды находятся в одной consumer-группе, естественно.
Если данные не умещаются в локальную базу, то будете получать стандартные для этого исключения: no space left on device, GC overhead limit exceeded и т.п.
Под разделами темы вы имеете ввиду партиции топика кафки?
Если точнее, я имею ввиду такую терминологию:
- Тема — Topic
- Раздел — Partition
Если данные не умещаются в локальную базу, то будете получать стандартные для этого исключения: no space left on device, GC overhead limit exceeded и т.п.
Как же тогда масштабироваться, если на входе много данных?
Как же тогда масштабироваться, если на входе много данных?
бейте на много партишинов ваш топик
Kafka Streams — непростая жизнь в production