2

Ich benutze Spring Kafka Consumer, die Nachrichten von einem Thema abruft und sie in einer db persistent. Wenn eine Fehlerbedingung erfüllt ist, sagen wir zum Beispiel, dass die Datenbank nicht verfügbar ist, stellt die Kafka-Benutzerbibliothek einen Mechanismus zum erneuten Versuch bereit? Wenn dies der Fall ist, können verschiedene Wiederholungsintervalle eingestellt werden, z. B. 1. Wiederholung nach 5 Minuten, 2. nach 30 Minuten, 3. nach 1 Stunde etc.Frühling Kafka Consumer Retry

Antwort

1

Frühling Kafka wird mit RetryingMessageListenerAdapter und RetryingAcknowledgingMessageListenerAdapter geliefert. Wenn Sie @KafkaListener verwenden, können Sie AbstractKafkaListenerContainerFactory mit der RetryTemplate liefern. Und die letzte kann mit jedem benutzerdefinierten RetryPolicy und BackOffPolicy vom Frühling Retry Projekt injiziert werden:

https://docs.spring.io/spring-kafka/docs/2.0.0.RELEASE/reference/html/_reference.html#_retrying_deliveries

bedenken Sie auch, dass seit Version 2.0 gibt es Transaktionsunterstützung im Frühjahr Kafka, basierend auf einer solchen ein in der Apache Kafka 0.11.x.x:

https://docs.spring.io/spring-kafka/docs/2.0.0.RELEASE/reference/html/_reference.html#transactions

+0

Dank Artem, als ich 10 Offsets sagt zum Beispiel in einer Partition. Wenn die Nachricht bei Offset 5 nicht in die DB eingefügt werden kann, würde dies auf der Grundlage der Wiederholungskonfiguration versucht werden, die ich einstelle, während die Offsets 6 bis 10 weiterhin als Teil des normalen Prozesses ausgeführt werden? Oder würde der Verbraucher warten, bis 5 erfolgreich abgeschlossen wurde? Ich nehme an, die Nachricht wird nicht für Offset 5 festgeschrieben, bis die Wiederholungsversuche erschöpft sind –

+0

Das ist richtig. Datensätze in der gleichen Partition werden sequentiell verarbeitet, und daher wird "6" nicht verarbeitet, bis "5" erfolgreich ist oder in der Wiederholung erschöpft ist. –

+0

Danke, eine letzte Frage. Kann ich den Wiederholungsversuch nur für bestimmte Fehlertypen aktivieren? –