Я реализовал топологию цапли, которая читает сообщения из очереди Кафки. Следовательно, моя топология имеет носик кафки и болт, который подсчитывает количество сообщений, прочитанных из очереди.
Когда я посылаю сообщения 10000
в очередь kafka, я вижу все сообщения, получаемые в носике kafka в топологии цапли, однако при болте теряется мало сообщений.
Ниже приведены настройки топологии для цапли
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 рулетки не было подтверждений