Репликация через события Кафки против MySQL
У меня есть необходимость вести копию внешней базы данных (включая некоторые дополнительные производные данные). С одним и тем же набором оборудования какое из следующих решений даст мне более быструю согласованность (низкую задержку) и высокую доступность? Предположим, обновления во внешней базе данных происходят со скоростью 1000 записей в секунду.
a) Создайте локальную реплику mysql для внешней базы данных, используя репликацию mysql 5.7 (механизм двоичного файла журнала).
ИЛИ ЖЕ
б) Получать события Кафки в реальном времени из внешней системы, выполняя HTTP GET для получения обновленных сведений об объекте и использовать эти данные для поддержки локальной реплики mysql.
2 ответа
Первый почти наверняка даст вам более низкую задержку (поскольку есть только две системы, а не три). Доступность примерно одинакова - у Kafka высокая доступность, но в любом случае у вас есть две базы данных с обеих сторон.
Второе лучше, если вы думаете, что хотите отправить данные в режиме реального времени в дополнительную систему. То есть: MySQL1 -> Kafka -> (MySQL2 + Elastic Search + Cassandra + ...)
Я ненавижу отвечать на вопросы "просто используйте эту странную вещь вместо этого", но я действительно волнуюсь, что вы готовитесь слишком тяжело, чем вам может понадобиться - или, может быть, вы делаете, и я неправильно прочитал.
Рассмотрим инструмент для сплетен, такой как serf.io. Он почти закончен и может дать вам именно то, что вам может понадобиться с чем-то более легким, чем кластер kafka или пара mysql.