Sobes.tech
Senior

Vous lisez des événements par lots et écrivez par lots dans ClickHouse. Comment cela fonctionne-t-il avec ACK — quand donnez-vous la confirmation?

sobes.tech IA

Réponse de l'IA

При чтении и записи данных батчами (batch) в системе с подтверждением (ACK) важно правильно управлять моментом подтверждения, чтобы не потерять данные и не обработать их повторно.

Обычно подтверждение (ACK) даётся после успешной записи всего батча в ClickHouse. То есть:

  1. Считаем батч событий из источника.
  2. Пишем батч в ClickHouse.
  3. Если запись прошла успешно, отправляем ACK для этого батча.

Если запись не удалась, ACK не отправляем, и батч будет прочитан повторно (в зависимости от механизма очереди).

Такой подход гарантирует, что данные не потеряются и не будут подтверждены до фактической записи.

Примерно так:

batch := readBatch()
err := writeBatchToClickHouse(batch)
if err == nil {
    sendACK(batch)
} else {
    // логируем ошибку, возможно, повторяем попытку
}