Сообщения падают между носиком и болтом
Я реализовал топологию цапли, которая читает сообщения из очереди Кафки. Следовательно, моя топология имеет носик кафки и болт, который подсчитывает количество сообщений, прочитанных из очереди.
Когда я излучаю, говорю 10000
Сообщения в очередь Кафки, я вижу все сообщения, получаемые в носик Кафки в топологии цапли, однако, мало сообщений теряются при болте.
Ниже приведены настройки топологии для цапли
Config config = Config.newBuilder()
.setUserConfig("topology.max.spout.pending", 100000)
.setUserConfig("topology.message.timeout.secs", 100000)
.setNumContainers(1)
.setPerContainerCpu(3)
.setPerContainerRamInGigabytes(4)
.setDeliverySemantics("ATLEAST_ONCE")
.build();
Любые указатели будут полезны.
РЕДАКТИРОВАТЬ: я использую API потоковых цапли. Я заменил счетный болт с log
болт, но видя ту же проблему падения сообщений в журналах log
болт
processingGraphBuilder.newSource(kafkaSource)
.log();
РЕДАКТИРОВАТЬ 2: Я решил проблему, полностью удалив API-интерфейс потоковой передачи. Я переопределил все, используя базовый API изливов и болтов, и у меня было дозирование. Это решило проблему. Я полагаю, это произошло из-за того, что в spout в API рулетки не было подтверждений
2 ответа
Простой ответ: не должен падать.
Несколько вопросов: - В heronui, сколько всего времени излучается и проверяется ваш носик? - В heronui, каковы все время выполнения, подтверждения и неудачи вашего болта?
Когда вы говорите, что сообщения отбрасываются, вы видите ошибки, зарегистрированные в метрике счетчика ошибок, или просто то, что ваш счетчик выполнения в болте не совпадает с счетчиком выбросов излива?
В режиме совместимости с Storm метрики рассчитываются на основе выборки (я думаю, по умолчанию 5%). Таким образом, отсчеты могут быть на этом краю. Например, в зависимости от того, когда сэмплируется поток, вы можете отправить 100 кортежей, а число выполнений может быть 80 или 120.