Команда Redis представляет новый тип данных Streams для Redis 5.0.Поскольку Streams с первого взгляда выглядит как темы Kafka, странно находить реальные примеры его использования.
В вводных потоках мы проводим сравнение с потоками Kafka:
- Обработка групп потребителей во время выполнения.Например, если один из трех абонентов выйдет из строя постоянно, Redis продолжит обслуживать первое и второе, потому что теперь у нас будет только два логических раздела (потребителей).
- Redis работает намного быстрее.Они хранятся и работают из памяти, так что это как есть.
У нас есть какой-то проект с Kafka, RabbitMq и NATS.Теперь мы углубимся в поток Redis, чтобы попытаться использовать его в качестве «кэша pre kafka», а в некоторых случаях в качестве альтернативы Kafka / NATS.Наиболее критическая точка сейчас - это репликация:
- Хранить все данные в памяти с репликацией AOF.
- По умолчанию асинхронная репликация не гарантирует, что изменения состояния команд XADD или групп потребителей будутреплицируется: после аварийного переключения что-то может отсутствовать в зависимости от способности ведомых устройств получать данные от мастера.Это похоже на точку, чтобы убить любой интерес, чтобы попробовать потоки в высокой нагрузке.
- Процесс аварийного переключения Redis, управляемый Sentinel или Redis Cluster, выполняет только наилучшую проверку для переключения на ведомое устройство, которое является наиболее обновленным, ипри определенных конкретных сбоях возможно продвижение раба, которому не хватает некоторых данных.
И стратегия ограничения.Настоящим «ограниченным ресурсом» в Redis Streams является память, поэтому на самом деле не так важно, сколько элементов вы хотите сохранить или какую стратегию ограниченного использования вы используете.Таким образом, каждый раз, когда ваш потребитель терпит неудачу, вы получаете пиковое потребление памяти или потерянное сообщение с ограничением.
Мы используем Kafka в качестве клиентского интерфейса RTB, который обрабатывает ~ 1 100 000 сообщений в секунду с полезной нагрузкой ~ 120 байт.С Redis мы имеем ~ 170 МБ / с потребления памяти при записи, а с 512 ГБ ОЗУ сервера мы имеем «резерв» записи на ~ 50 минут данных.Так что если бы система обработки была бы отключена в это время, мы бы потерпели крах.
Не могли бы вы рассказать подробнее об использовании Redis Streams в реальном мире, и, возможно, в некоторых случаях вы пытаетесь использовать его самостоятельно?Или, может быть, Redis Streams можно использовать с небольшим объемом данных?