Антон Долганин

Я инженер, который решает задачи, а не пишет на языке. Архитектура, разработка, DevOps — подбираю инструменты под цель, строю решения, которые работают в проде и масштабируются без боли.

Частая архитектура: Kafka доставляет события, Redis обеспечивает мгновенный доступ к данным.

Как связать: Kafka Consumer подписан на compacted-топик (например, user-state). При каждом новом событии:


import org.apache.kafka.clients.consumer.*;
import redis.clients.jedis.Jedis;
import java.util.*;

Jedis jedis = new Jedis("localhost", 6379);
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "cache-sync");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("auto.offset.reset", "earliest");

KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("user-state"));

for (ConsumerRecord<String, String> record : consumer.poll(Duration.ofMillis(100))) {
    jedis.set(record.key(), record.value());
}

Прогрев? Просто запускаем consumer с from-beginning и заливаем все данные в Redis.

Зачем это нужно:

  • Redis дает мгновенный доступ к данным (мс), не нагружая базу данных
  • Kafka хранит историю и изменения — выступает источником истины
  • Получаем актуальный и реактивный кэш, который можно легко масштабировать и быстро восстановить

Отлично подходит для:

  • Профилей пользователей
  • Конфигураций
  • Состояний устройств
  • Данных, которые часто читаются, но редко меняются

Kafka + Redis = быстрый, реактивный кэш