Oppdatert kafka config. Det er blant annet tydeligere hvilken config som gjelder for hvilket topic #555
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Gjennomgang av kafka config
Setter
auto-offset-reset: earliest
for å sikre at ingen hendelser går tapt dersom offset mangler eller blir slettet. Ulempen er at dersom det må leses fra start, kan det ta noe tid (leesah/personhendelse-topic har 30 dagers retention). Likevel anses det som akseptabelt at hendelser i verste fall leses en dag etter publisering. For kontantstøtte-vedtak-topicet, som har 60 dagers retention og relativt få hendelser, er det også uproblematisk å lese fra start om offset mistes.Transaksjoner
Konfigurasjon av transaksjoner og offset-commit kan være litt forvirrende siden det finnes to forskjellige innstillinger:
enable-auto-commit: true/false
ogackMode
.enable-auto-commit
er en Kafka-native innstilling, mensackMode
er spesifikk for Spring, og de fungerer i utgangspunktet uavhengig av hverandre. Problemer kan imidlertid oppstå hvis de er konfigurert på en «motstridende» måte. Generelt anbefales det å sette enable-auto-commit til false og laackMode
styre offset-commit. Det er sjelden nødvendig å sette auto-commit til true i applikasjoner. I enkelte tilfeller, som PoC eller logging hvor duplikater ikke er kritiske, kan auto-commit være hensiktsmessig. For de fleste produksjonsapplikasjoner er det imidlertid tryggest å sette auto-commit til false og konfigurere offset-commit med ackMode i Spring.Standard
ackMode
i Spring erBATCH
, som betyr at Spring committer offset etter at en batch er fullstendig prosessert. Siden vi ønsker å prioritere stabilitet og robusthet fremfor ytelse i alle apper, er det fornuftig å setteackMode
tilMANUAL_IMMEDIATE
. Dette gjør at offset committer så snartack.acknowledge()
kalles, uten å vente på eventuell post-prosessering som Spring ellers ville ha utført før commit.max-poll-records
er fortsatt viktig å sette, siden den styrer hvor mange hendelser som hentes inn til prosessering per poll, uavhengig av transaksjoner. Generelt anbefales det å ha en lav verdi dersom stabilitet prioriteres over ytelse. Jeg har satt denne til 1 for å være på den sikre siden, da ytelse ikke er et problem i vårt tilfelle, men det kan være noe defensivt.Tiltak for å gjøre konfigurasjon mer forståelig
For apper med flere Kafka-listenere kan det være hensiktsmessig å unngå Kafka-consumer-konfigurasjon i
application.yaml
, da det lett kan bli uklart hvilke listenere konfigurasjonen gjelder for. I stedet anbefales det å opprette en egenkafkaListenerContainerFactory
per topic, ettersom ulike topics ofte har behov for spesifikk konfigurasjon – for eksempel om de bruker Avro eller ikke.Dette er hva jeg har kommet frem til, men er selvfølgelig åpen for diskusjon :)
Favro