> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-detect-table-modification.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Подробно описывает лучшие практики, которых следует придерживаться при работе с Kafka ClickPipes.

# Лучшие практики

<div id="compression">
  ## Сжатие сообщений
</div>

Мы настоятельно рекомендуем использовать сжатие для топиков Kafka. Сжатие позволяет существенно сократить затраты на передачу данных практически без ущерба для производительности.
Чтобы узнать больше о сжатии сообщений в Kafka, рекомендуем начать с этого [руководства](https://www.confluent.io/blog/apache-kafka-message-compression/).

<div id="limitations">
  ## Ограничения
</div>

* [`DEFAULT`](/ru/reference/statements/create/table#default) не поддерживается.
* По умолчанию размер отдельного сообщения ограничен 16 МБ (без сжатия) при использовании реплики минимального размера (XS) и 32 МБ (без сжатия) при использовании реплик большего размера.  Сообщения, превышающие этот лимит, будут отклонены с ошибкой.  Если вам нужны сообщения большего размера, обратитесь в службу поддержки.

<div id="delivery-semantics">
  ## Семантика доставки
</div>

ClickPipes for Kafka обеспечивает семантику доставки `at-least-once` (это один из самых распространённых подходов). Будем рады получить ваши отзывы о семантике доставки через [контактную форму](https://clickhouse.com/company/contact?loc=clickpipes). Если вам нужна семантика «ровно один раз», рекомендуем использовать наш официальный коннектор-приёмник [`clickhouse-kafka-connect`](https://clickhouse.com/blog/real-time-event-streaming-with-kafka-connect-confluent-cloud-clickhouse).

<div id="authentication">
  ## Аутентификация
</div>

Для источников данных, использующих протокол Apache Kafka, ClickPipes поддерживает аутентификацию [SASL/PLAIN](https://docs.confluent.io/platform/current/kafka/authentication_sasl/authentication_sasl_plain.html) с шифрованием TLS, а также `SASL/SCRAM-SHA-256` и `SASL/SCRAM-SHA-512`. В зависимости от источника стриминга (Redpanda, MSK и т. д.) будут доступны все или только некоторые из этих механизмов аутентификации — в зависимости от совместимости. Если вам нужны другие способы аутентификации, пожалуйста, [сообщите нам об этом](https://clickhouse.com/company/contact?loc=clickpipes).

<div id="warpstream-settings">
  ## Размер выборки в Warpstream
</div>

ClickPipes используют параметр Kafka `max.fetch_bytes`, чтобы ограничить размер данных, одновременно обрабатываемых одним узлом ClickPipes. В некоторых случаях
Warpstream игнорирует этот параметр, что может приводить к непредвиденным сбоям пайпов. Мы настоятельно рекомендуем при настройке агента WarpStream установить специальный параметр Warpstream `kafkaMaxFetchPartitionBytesUncompressedOverride`
в значение 8 MB (или меньше), чтобы предотвратить сбои ClickPipes.

<div id="iam">
  ### IAM
</div>

ClickPipes поддерживает следующие способы аутентификации AWS MSK

* аутентификация [SASL/SCRAM-SHA-512](https://docs.aws.amazon.com/msk/latest/developerguide/msk-password.html)
* аутентификация с использованием [учетных данных IAM или доступа на основе ролей](https://docs.aws.amazon.com/msk/latest/developerguide/how-to-use-iam-access-control.html)

При использовании аутентификации IAM для подключения к брокеру MSK роль IAM должна иметь необходимые разрешения.
Ниже приведен пример необходимой политики IAM для API Apache Kafka в MSK:

```json theme={null}
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:Connect"
            ],
            "Resource": [
                "arn:aws:kafka:us-west-2:12345678912:cluster/clickpipes-testing-brokers/b194d5ae-5013-4b5b-ad27-3ca9f56299c9-10"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:DescribeTopic",
                "kafka-cluster:ReadData"
            ],
            "Resource": [
                "arn:aws:kafka:us-west-2:12345678912:topic/clickpipes-testing-brokers/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kafka-cluster:AlterGroup",
                "kafka-cluster:DescribeGroup"
            ],
            "Resource": [
                "arn:aws:kafka:us-east-1:12345678912:group/clickpipes-testing-brokers/*"
            ]
        }
    ]
}
```

<div id="configuring-a-trusted-relationship">
  #### Настройка доверительной связи
</div>

Если вы выполняете аутентификацию в MSK с помощью ARN роли IAM, вам нужно настроить доверительную связь между вашим экземпляром ClickHouse Cloud и этой ролью, чтобы экземпляр мог принять роль.

<Note>
  Доступ на основе ролей работает только для экземпляров ClickHouse Cloud, развернутых в AWS.
</Note>

```json theme={null}
{
    "Version": "2012-10-17",
    "Statement": [
        ...
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::12345678912:role/CH-S3-your-clickhouse-cloud-role"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

<div id="custom-certificates">
  ### Пользовательские сертификаты
</div>

ClickPipes for Kafka поддерживает загрузку пользовательских сертификатов для брокеров Kafka, использующих непубличные серверные сертификаты.
Также можно загружать клиентские сертификаты и ключи для аутентификации на основе взаимного TLS (mTLS).

<div id="performance">
  ## Производительность
</div>

<div id="batching">
  ### Батчинг
</div>

ClickPipes вставляет данные в ClickHouse батчами. Это позволяет избежать создания слишком большого количества частей в базе данных, что может привести к проблемам с производительностью кластера.

Батчи вставляются при выполнении одного из следующих условий:

* Размер батча достиг максимального значения (100 000 строк или 28 МБ на 1 ГБ памяти пода)
* Батч оставался открытым в течение максимально допустимого времени (5 секунд)

<div id="latency">
  ### Задержка
</div>

Задержка (определяемая как время между публикацией сообщения в Kafka и моментом, когда оно становится доступным в ClickHouse) зависит от ряда факторов (например, задержки брокера, сетевой задержки, размера/формата сообщения). [Батчинг](#batching), описанный в разделе выше, также влияет на задержку. Мы всегда рекомендуем тестировать ваш конкретный сценарий при типичных нагрузках, чтобы определить ожидаемую задержку.

ClickPipes не предоставляет никаких гарантий по задержке. Если у вас есть строгие требования к низкой задержке, пожалуйста, [свяжитесь с нами](https://clickhouse.com/company/contact?loc=clickpipes).

<div id="scaling">
  ### Масштабирование
</div>

ClickPipes for Kafka поддерживает горизонтальное и вертикальное масштабирование. По умолчанию создается группа потребителей с одним потребителем. Это можно настроить при создании ClickPipe или позже в разделе **Настройки** -> **Дополнительные настройки** -> **Масштабирование**.

ClickPipes обеспечивает высокую доступность благодаря архитектуре, распределенной по зонам доступности.
Для этого необходимо масштабирование как минимум до двух потребителей.

Независимо от количества работающих потребителей отказоустойчивость обеспечивается на уровне архитектуры.
Если потребитель или базовая инфраструктура выйдет из строя,
ClickPipe автоматически перезапустит потребителя и продолжит обработку сообщений.

<div id="benchmarks">
  ### Бенчмарки
</div>

Ниже приведены несколько неформальных бенчмарков для ClickPipes for Kafka, которые помогут получить общее представление о базовой производительности. Важно учитывать, что на производительность влияет множество факторов, включая размер сообщений, типы данных и формат данных. Фактические результаты могут отличаться, и приведенные здесь значения не гарантируют такой же производительности в реальных условиях.

Детали бенчмарка:

* Мы использовали сервисы ClickHouse Cloud в продакшн-конфигурации с достаточным объемом ресурсов, чтобы пропускная способность не упиралась в обработку вставки на стороне ClickHouse.
* Сервис ClickHouse Cloud, кластер Kafka (Confluent Cloud) и ClickPipe работали в одном регионе (`us-east-2`).
* ClickPipe был настроен с одной репликой размера L (4 GiB оперативной памяти и 1 vCPU).
* Тестовые данные включали вложенные структуры и сочетание типов `UUID`, `String` и `Int`. Другие типы данных, такие как `Float`, `Decimal` и `DateTime`, могут давать более низкую производительность.
* Заметной разницы в производительности между сжатыми и несжатыми данными не наблюдалось.

| Размер реплики | Размер сообщения | Формат данных | Пропускная способность |
| -------------- | ---------------- | ------------- | ---------------------- |
| Large (L)      | 1.6kb            | JSON          | 63mb/s                 |
| Large (L)      | 1.6kb            | Avro          | 99mb/s                 |
