Я использую Kafka, и у нас есть прецедент для создания отказоустойчивой системы, где даже не должно быть пропущено ни одного сообщения. Итак, вот в чем проблема: Если публикация в Kafka завершилась неудачей по какой-либо причине (ZooKeeper down, брокером Kafka и т. Д.), Как мы можем безопасно обрабатывать эти сообщения и воспроизводить их, как только все будет снова восстановлено. Опять же, как я уже сказал, мы не можем позволить себе даже один отказ сообщения. Другой случай использования - нам также необходимо знать в любой момент времени, сколько сообщений не удалось опубликовать в Kafka по какой-либо причине, например, что-то вроде функции счетчика, и теперь эти сообщения нужно снова опубликовать повторно.Как справиться с отказом публикации kafka надежным способом
Одно из решений заключается в том, чтобы выталкивать эти сообщения в какую-либо базу данных (например, Cassandra, где записи выполняются очень быстро, но мы также нуждаемся в функции счетчика, и я думаю, что функция счетчика Cassandra не так уж полезна, и мы не хотим ее использовать.), который может обрабатывать такую нагрузку, а также предоставить нам счетчик, который является очень точным.
Этот вопрос больше с точки зрения архитектуры, а затем, какую технологию использовать, чтобы это произошло.
PS: Мы обрабатываем некоторые, например, 3000TPS. Таким образом, при сбое системы эти неудавшиеся сообщения могут расти очень быстро за очень короткое время. Мы используем фреймворки на основе Java.
Благодарим за помощь!
Спасибо Крису! Я понимаю, что Кафка была разработана таким образом, чтобы справляться с такой ситуацией, но в качестве аргумента, чтобы сказать, что все будет работать, поскольку это должно быть немного смелым заявлением, и для меня это обречено на неудачу рано или поздно.Просто для того, чтобы привести пример, хотя, несмотря на то, что у вас достаточно брокера и достаточно экземпляров заклинателя, все может выходить из-под контроля. Например: если в одной теме есть 3 реплики и установка min.insync.replicas на 2, т. Е. Запись в брокера будет успешной только тогда, когда две из 3-х реплик синхронизированы. Теперь в этом случае, если реплика не синхронизирована, он не примет новый запрос. – Coder
@Coder это может быть полезный блог о том, что ваш кластер настроен правильно, чтобы сохранить ваши отстающие реплики в качестве членов ISR: http://www.confluent.io/blog/hands-free-kafka-replication-a -lesson-in-operating-simplicity/ –
Спасибо, @Chris это полезно! – Coder