Skip to content
Kafka Is FunProgress

Enterprise Architecture · Enterprise

Production Hardening Checklist

Essential production configurations that prevent common failures in Kafka-based Spring Boot services.

application-prod.yml (hardened config)yaml
spring:
  kafka:
    bootstrap-servers: ${KAFKA_BROKERS}  # From environment

    producer:
      acks: all
      retries: 2147483647        # Effectively infinite
      properties:
        enable.idempotence: true
        max.in.flight.requests.per.connection: 5
        max.block.ms: 10000       # 10s before throwing if buffer full
        delivery.timeout.ms: 120000  # 2 minute total delivery timeout
        compression.type: lz4
        linger.ms: 5
        batch.size: 65536         # 64KB

    consumer:
      enable-auto-commit: false
      max-poll-records: 500
      properties:
        max.poll.interval.ms: 300000   # 5 minutes
        session.timeout.ms: 45000
        heartbeat.interval.ms: 15000
        fetch.min.bytes: 1
        fetch.max.wait.ms: 500
        isolation.level: read_committed  # If consuming from transactional topics

    listener:
      ack-mode: BATCH
      missing-topics-fatal: false  # Don't fail if topic missing at startup
      concurrency: ${KAFKA_CONCURRENCY:3}
      idle-event-interval: 60000   # Log idle consumers every 60s

    admin:
      properties:
        request.timeout.ms: 30000
HealthChecks.javajava
@Component
public class KafkaHealthIndicator implements HealthIndicator {

    private final KafkaAdmin kafkaAdmin;

    @Override
    public Health health() {
        try {
            // Check if we can connect to bootstrap servers
            kafkaAdmin.describeTopics("__consumer_offsets");
            return Health.up()
                .withDetail("cluster", "reachable")
                .build();
        } catch (Exception e) {
            return Health.down(e)
                .withDetail("cluster", "unreachable")
                .build();
        }
    }
}