Как читать 2 темы Kafka последовательно в одном потребительском классе с помощью Spring boot? - PullRequest
0 голосов
/ 28 мая 2020

У меня есть 2 темы Kafka A и B. Я хочу, чтобы каждый раз, когда мой потребитель запускается, сначала он переходит на topi c A. Topi c A содержит информацию о topi c B, и я буду полагаться на эту информацию для получения данных из topi c B.

Итак, по сути, мне нужно сначала прочитать topi c A перед тем, как перейти на topi c B, и мне просто нужно делать это один раз при каждом перезапуске моей программы.

Я могу думать о таких вещах, как:

@KafkaListener(topics = {"A" , "B"})

Или:

@KafkaListener(topics = "A")
public void receive() {}

@KafkaListener(topics = "B")
public void receive() {}

Оба не гарантируют последовательность чтения.

Как я могу заставить мою программу читать topi c A сначала и только go to topi c B после доделываю последние обновления на топи c А?

1 Ответ

1 голос
/ 28 мая 2020

Используйте что-то вроде этого ...

@KafkaListener(id = "bReceiver", autoStartup = "false, topics = "B")
public void receive() {}

Установите idleEventInterval и добавьте

@Autowired
KafkaListenerEndpointRegistry registry;

@EventListener(condition = "event.listenerId == 'aReceiver`)
public void eventListener(ListenerContainerIdleEvent event) {
    this.registry.getListenerContainer("aReceiver").stop(() -> { });
    this.registry.getListenerContainer("bReceiver").start();
}
...