Skip to content

sstensby/arbeidsgiver-notifikasjon-produsent-api

 
 

Repository files navigation

produsent-api

Lokal utvikling og tester

For lokal utvikling benyttes docker-compose til å starte nødvendige platform tjenester (postgres, kafka etc). Vi har god erfaring med colima.

  1. colima start
  2. docker-compose up (må kjøres i rot-mappen til prosjektet)

Lokal app startes ved å kjøre main metoden i LocalMain.kt.

Apiene blir da å nå på:

Hvert api kan inspiseres vha hostet graphql ide:

For at dette skal virke må man sende med riktig auth header (Authorization: Bearer ). Du kan f.eks. sette opp mod-header plugin i chrome eller firefox. Bruk LocalhostIssuer til å lage tokens du kan bruke i header.

Deploy med reset og rebuild

obs: kun for ikke kritiske apps som f.eks statistikk. Scale ned replicaset: kubectl get replicaset kubectl scale --replicas=0 deployment/notifikasjon-statistikk deploy ny app:

  • med migrering som nullstiller database til ønsket tidspunkt eller helt.
  • med ny consumer-group-id postfix eller set offset vha nais aiven cli

Koble direkte til DEV databaser

Du må ha være autentisert med gcloud og ha cloud_sql_proxy installert.

Kjør ./cloudsql-connect.sh dev notifikasjon-bruker-api 5432 og postgres-databasen vil være tilgjengelig på localhost:5432. Brukernavn er e-post-adressen din. Passord får du ved å kjøre gcloud auth print-access-token.

Koble direkte til en topic på aiven

Dersom man trenger å administrere en topic (f.eks. inspisere en topic, eller endre offsets for en consumer group), så kan man benytte kafka cli kombinert med nais aiven cli kafka-cli kan man laste ned med ./download_kafka_cli.sh nais aiven installeres med feks homebrew.

Det er opprettet en notifikasjon-devops applikasjon med read access til topic i dev og prod. Etter nais aiven er installert kan man opprette applikasjonen. husk å ha valgt riktig context i k8s først: nais aiven create kafka notifikasjon-devops fager

Deretter kan man generere credentials som kan brukes med f.eks kafka-cli: nais aiven get fager-notifikasjon-devops-ad9c851a fager

Dette genererer noen filer med secrets i en mappe lokalt, og viser hvor disse ble laget. Man kan med disse credentials bruke f.eks. kafka-console-consumer eler kafka-consumer-groups.

Noen eksempler på bruk:

Set env vars fra genrerert secrets (som f.eks $KAFKA_BROKERS)

KAFKA_CONFIG=/var/folders/7d/d3gk6jrx4c31pbjqb3qcyc_r0000gn/T/aiven-secret-1881600168
source $KAFKA_CONFIG/kafka-secret.env

i fish:

set KAFKA_CONFIG /var/folders/7d/d3gk6jrx4c31pbjqb3qcyc_r0000gn/T/aiven-secret-1881600168
bass "set -a; source $KAFKA_CONFIG/kafka-secret.env"

List offsets for en consumer group:

./kafka-consumer-groups.sh --bootstrap-server $KAFKA_BROKERS --command-config $KAFKA_CONFIG/kafka.properties --group bruker-model-builder --describe

Dersom man skal endre en offset på en partisjon må consumer group være inaktiv. Dette gjøres enklest ved å skalere ned deployment til 0:

kubectl scale --replicas=0 deployment/notifikasjon-bruker-api

Hopp over en offset på en gitt partisjon for en consumer group:

./kafka-consumer-groups.sh --bootstrap-server $KAFKA_BROKERS --command-config $KAFKA_CONFIG/kafka.properties --group bruker-model-builder --topic fager.notifikasjon:12 --reset-offsets --shift-by 1 --execute

Sett til et bestemt offset på en gitt partisjon for en consumer group:

kafka-consumer-groups.sh --bootstrap-server $KAFKA_BROKERS --command-config /var/folders/7d/d3gk6jrx4c31pbjqb3qcyc_r0000gn/T/aiven-secret-1881600168/kafka.properties --group bruker-model-builder --topic fager.notifikasjon:12 --reset-offsets --to-offset 50 --execute

Les topic for en gitt partisjon fra et gitt offset:

.kafka-cli/bin/./kafka-console-consumer.sh --bootstrap-server $KAFKA_BROKERS --consumer.config $KAFKA_CONFIG/kafka.properties --topic fager.notifikasjon --formatter kafka.tools.DefaultMessageFormatter --property print.value=true --property print.offset=true --partition 12 --offset 124

Describe topic:

kafka-cli/bin/./kafka-topics.sh --bootstrap-server $KAFKA_BROKERS --command-config $KAFKA_CONFIG/kafka.properties --topic fager.notifikasjon --describe

Ticks n' Trips

  • start lokal kafka cluster
    • docker-compose up -d
  • connect til broker
    • docker exec -it broker bash
  • kjøre command på broker
    • docker exec -it broker <command>
  • vis broker version
    • kafka-broker-api-versions --bootstrap-server localhost:9092 --version
  • create topic
    • kafka-topics --zookeeper $ZK_HOSTS --create --topic fager.notifikasjon --partitions 3 --replication-factor 3
      • legg til --if-not-exists for å kun opprette dersom den ikke eksisterer fra før
  • list topics
    • kafka-topics --zookeeper zookeeper:2181 --list
    • kafka-topics --zookeeper zookeeper:2181 --list --exclude-internal
  • describe topic
    • kafka-topics --zookeeper zookeeper:2181 --topic fager.notifikasjon --describe
  • juster opp antall partisjoner for topic
    • kafka-topics --zookeeper zookeeper:2181 --alter --topic fager.notifikasjon --partitions 5
  • purge en topic (krever å sette retention lav, så vente, så slette retention)
    • kafka-configs --zookeeper zookeeper:2181 --alter --entity-type topics --entity-name fager.notifikasjon --add-config retention.ms=1000
    • a few moments later
    • kafka-configs --zookeeper zookeeper:2181 --alter --entity-type topics --entity-name fager.notifikasjon --delete-config retention.ms
  • list config for en topic
    • kafka-configs --bootstrap-server localhost:9092 --describe --entity-type topics --entity-name fager.notifikasjon
  • endre config på en topic
    • kafka-configs --bootstrap-server localhost:9092 --alter --entity-type topics --entity-name fager.notifikasjon --add-config cleanup.policy=compact
  • delete topic
    • kafka-topics --zookeeper zookeeper:2181 --delete --topic fager.notifikasjon
  • consume en topic og print til console (default from latest)
    • kafka-console-consumer --bootstrap-server localhost:9092 --topic fager.notifikasjon --formatter kafka.tools.DefaultMessageFormatter --property print.key=true --property print.value=true
    • from the beginning (legg til --from-beginning)
      • kafka-console-consumer --bootstrap-server localhost:9092 --topic fager.notifikasjon --formatter kafka.tools.DefaultMessageFormatter --property print.key=true --property print.value=true --from-beginning
  • produce til en topic
    • kafka-console-producer --bootstrap-server localhost:9092 --topic fager.notifikasjon
  • delete messages from a topic
    • kafka-delete-records.sh --bootstrap-server $KAFKA_BROKERS --offset-json-file delete-records.json
  • inspect a consumer group
    • kafka-consumer-groups.sh --bootstrap-server $KAFKA_BROKERS --command-config /tmp/kafka.properties --group query-model-builder --describe
  • adjust offset of a consumer group (requires group is inactive, i.e. no running consumers)
    • kafka-consumer-groups.sh --bootstrap-server $KAFKA_BROKERS --command-config /tmp/kafka.properties --group query-model-builder --topic fager.notifikasjon --reset-offsets --to-earliest --execute
    • kafka-consumer-groups.sh --bootstrap-server $KAFKA_BROKERS --command-config /tmp/kafka.properties --group query-model-builder --topic fager.notifikasjon --reset-offsets --shift-by 1 --execute
    • kafka-consumer-groups.sh --bootstrap-server $KAFKA_BROKERS --command-config /tmp/kafka.properties --group query-model-builder --topic fager.notifikasjon --reset-offsets --to-datetime 2020-11-01T00:00:00Z --execute
    • specify partition using --topic topic:0,1,2. e.g. reset offset for partition 14 to 5004:
    • kafka-consumer-groups.sh --bootstrap-server $KAFKA_BROKERS --command-config /tmp/kafka.properties --group query-model-builder --topic fager.notifikasjon:14 --reset-offsets --to-offset 5004 --execute

ref: https://medium.com/@TimvanBaarsen/apache-kafka-cli-commands-cheat-sheet-a6f06eac01b

Releases

No releases published

Packages

No packages published

Languages

  • Kotlin 97.0%
  • HCL 2.0%
  • Other 1.0%