Detail
#26669
Kafka Producer und Consumer sollen prüfen ob ein Topic existiert, bevor sie es versuchen zu verwenden
Kafka teil die Kommunikation in Topics ein. Producer und Consumer senden beziehungsweise empfangen aus Topics. Welche das sind, steht in ihrer Konfiguration. Bevor Topics verwendet werden können, müssen diese üblicherweise angelegt werden. (Nur auf Test Systemen geschieht dies manchmal automatisch.) Producer und Consumer sollen prüfen, ob ihre Topics existieren, bevor sie sie verwenden. Denn leider verhält sich Kafka hier ungünstig: Je nach Situation werden die Logs mit Warnungen überflutet, ohne rechtzeitig die Anwendung zu informieren. Außerdem ist die Fehlermeldung nur eingeschränkt hilfreich.
Verbesserung
Kafka Producer und Consumer sollen prüfen ob ihre Topics existieren. Wenn sie nicht existieren, wird versucht sie anzulegen. Gelingt das nicht, wird der Start der Anwendung abgebrochen.
Anwendung
Die Einstellung ist automatisch aktiv. Es gibt folgende Konfigurationsoptionen:
- create-topics="false": Topics nicht anlegen, wenn sie nicht existieren.
- disabled="true": Nicht prüfen, ob die Topics existieren. Reaktiviert das alte Verhalten. Das ist zum Beispiel für Entwickler sinnvoll, um Anwendungen starten zu können ohne Kafka starten zu müssen.
- wait-timeout="30s": Beim Prüfen und Anlegen von Topics maximal so lange auf die Antwort vom Server warten. Default ist 10 Sekunden.
- Zum Format siehe: com.top_logic.basic.config.format.MillisFormat
Beispiel: {{{#!xml <application xmlns:config="http://www.top-logic.com/ns/config/6.0"> <configs> <config config:interface="com.top_logic.kafka.services.common.TopicChecker$Config" disabled="true" /> </configs> </application> }}}
Code Migration
- Es sollte mit der Kundschaft geklärt werden, ob die Anwendung die Topics selber anlegen darf, wenn sie nicht existieren.
- Zur Entwicklung empfiehlt es sich in der persönlichen Konfiguration die Prüfung abzuschalten, wenn die Anwendung lokal auch ohne Kafka starten können soll.
Test
Kein automatischer Test, da hier unterschiedliche Kafka Server Einstellungen notwendig sind, und die Tests das nicht unterstützen.
- Die Kafka Tests finden keinen Fehler.
- Eine Kafka Anwendung mit Kafka starten: Das muss funktionieren.
- Eine Kafka Anwendung ohne Kafka starten: Das muss scheitern.
- In der Datei für die Kafka Server Konfiguration eintragen, dass Topics nicht automatisch angelegt werden.
- Die Kafka Tests finden keinen Fehler.
- Eine Kafka Anwendung mit Kafka starten: Das muss funktionieren.
- Eine Kafka Anwendung ohne Kafka starten: Das muss scheitern.
- Die Konfiguration TopicChecker.Config.create-topics auf false setzen.
- Die Kafka Tests schlagen fehl.
- Eine Kafka Anwendung mit Kafka starten: Das muss scheitern.
- Eine Kafka Anwendung ohne Kafka starten: Das muss scheitern.
- Die Konfiguration TopicChecker.Config.disabled auf true setzen.
- Die Kafka Tests schlagen fehl.
- Eine Kafka Anwendung mit Kafka starten: Das muss funktionieren.
- Eine Kafka Anwendung ohne Kafka starten: Das muss funktionieren.