Sobes.tech
Back to questions
Senior
4

Вы читаете события пачками (batch) и пишете в ClickHouse батчами. Как это работает с ACK — когда даёте подтверждение?

Companies where asked
А7

Answer from AI

sobes.tech AI

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

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

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

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

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

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

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