одна нода ClickHouse, расположенная в Европе. И несколько сервисов географически отдаленных на разных континентах, которые напрямую пишут в ClickHouse. Проблемы (commit error: driver: bad connection) возникают, когда происходит потеря пакетов между клиентом и сервером. Потери происходят где-то в интернете, поэтому, насколько я понимаю, на это нельзя никак повлиять.
Первая идея была - при ошибке записи делать дамп локально на диск и пробовать записать его позже. Прикрутил https://github.com/nikepan/clickhouse-bulk, но при высоких нагрузках он себя плохо проявил.
Сейчас думаю над тем, чтобы:
* cделать ClickHouse кластер и расположить ноды поближе к клиентам. Но предполагаю, что из-за той же потери пакетов сами ноды могут плохо синхронизироваться.
* или писать в промежуточное хранилище (Apache Kafka) и потом выгребать из него в ClickHouse.
Подскажите, как лучше поступить в данной ситуации?
писать в промежуточное хранилище (Apache Kafka) и потом выгребать из него в ClickHouse.
может уже дали ответ, но как то мельком посмотрел и не заметил. для геокластера используйте надёжный транспорт: rabbitmq (shovel), rsync (немного кастома), p2p (много кастома). т.е. региональные ноды пишут в rmq/ в файлик, данные прилетают в центральную точку и там записываются. кафка afaik не умеет в гео-кластере работать. да и напрямую, через интернет писать не стоит. по размещению реплик в регионах не подскажу - вроде бы нужен единый зукипер, а ему нужна хорошая сеть. rmq много сообщений в секунду не пропустит (1-10к qps), но в одно сообщение можно паковать массив бизнесовых эвентов и пропускная способность будет 1-10к * размер массива. мы так из азии в европу в рамках геокластера гнали статистику на скорости более 10к/с
Обсуждают сегодня