Insurance Platform Every policy change becomes an event. Kafka carries it to search, analytics and a secured gateway.

It began in 2024 as a Kafka streaming exercise: a service literally called twitter-to-kafka-service. In 2026 I rebuilt the top of the stack around insurance policies and claims, adding service discovery, a JWT-secured gateway, and Prometheus and Grafana.

Stack
Java · Spring Boot · Kafka · Elasticsearch · Eureka · Redis
Status
Open source · GitHub ↗︎
  • 8microservices
  • 3Kafka brokers
  • 54commits since 2024

Insurance Platform

Java · Spring Boot · KafkaView code
Insurance Platform: policy data moving from providers through Kafka and Elasticsearch to a gateway

01 · Problem

A course project isn't a platform.

The original pipeline could stream and index events, but nothing secured a route, discovered a service, or rate-limited a client — what a real system in front of insurers actually needs.

02 · Solution

Keep the pipeline, build the platform around it.

Ingestion, streaming and indexing stayed as they were. Eureka now gives services a registry instead of hard-coded URLs, a gateway checks a JWT and rate-limits each route through Redis, and Prometheus, Grafana and ELK watch all of it.

03 · Engineering

Writes go to Kafka and reads come from Elasticsearch, so the query side never blocks on the write side, or on the insurer feed behind it.

04 · Key decisions

  • CQRS split: Kafka writes, Elasticsearch reads
  • Eureka discovery, not static service URLs
  • Redis rate limits: 5–10 req/s per route
  • JWT at the gateway, not in every service
  • Prometheus, Grafana, ELK across all 8 services

Engineering note

Every service still says “twitter.” The events are insurance policies now; the class names never caught up.

The write path began as a Kafka course project on tweet streams: the ingestion service is still called twitter-to-kafka-service, and its schema still has a userId field. When I rebuilt the top of the stack in 2026 (Eureka, JWT, Redis limits, Prometheus, Grafana) I left that name alone on purpose.