Это немного сложно узнать с предоставленной информацией, но я подозреваю, что эта проблема заключается в том, что вы можете потреблять и затем вычислять результат из первой темы быстрее, чем вы можете произвести во вторую тему. Могло быть много причин, почему это может произойти. Например, возможно, записи во вторичную тему не так распределены между разделами. Аналогичным образом, производство в другой кластер может преуспеть по целому ряду причин, включая более быстрые машины, больше машин, лучшую сеть и т. Д.
Основная проблема не в том, что касается Kafka: если вы потребляете один источник и отправляете что данные во второй приемник, который вы часто не можете принять, 2-й приемник всегда будет быстрее первого источника. Всякий раз, когда второй приемник идет медленнее, даже немного, вы, в конце концов, столкнетесь с такой проблемой. Например, скажем, вы можете читать 100 событий в секунду из первичной, но вторичный приемник может потреблять только 99 событий в секунду. Это означает, что каждую секунду вы получаете еще одно событие в памяти, ожидающее отправки в вашу раковину. Если вы не делаете ничего, чтобы замедлить скорость, с которой вы читаете из основного источника, у вас будет нехватка ОЗУ, потоков или какого-либо другого ресурса.
Общее решение - это своего рода дросселирование. Например, вы можете использовать Semaphore
, который начинается с 500 разрешений: это означает, что вы никогда не сможете прочитать более 500 предметов из основного источника, который еще не был успешно отправлен в раковину. Прежде чем читать элемент из основного источника, вы уменьшите Semaphore
, чтобы, если вы уже «опережаете» вторичный объект на 500 единиц, ваш читатель будет блокировать. Каждый раз, когда вы успешно отправляете элемент в свою вторую тему, вы выпускаете разрешение, позволяющее продолжить чтение.
Я бы предостерег от исправлений, как использование 2-го кластера Kafka или что-то еще, что работает, но на самом деле не затрагивает основную проблему. Например, если теперь работать с другим кластером, это не произойдет, когда этот кластер замедлит работу из-за потери узла, большой перебалансировки и т. Д. Это временно скроет проблему.
Если вы новичок в Apache Kafka, было бы лучше перейти на последнюю версию - 0.10.1. Есть много хороших изменений, а также уровень абстракции весны. –
Я также попробую обновить, но проблема в том, что мне нужна некоторая недостающая конфигурация. – Vaibhav