Learning Platform
Глоссарий Troubleshooting
Урок 12.08 · 25 мин
Продвинутый
nativeHTTPMySQLPostgreSQLwire protocol

Native и HTTP протоколы

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


Native TCP (порт 9000)

Native TCP — бинарный протокол ClickHouse с колоночным layout данных:

# clickhouse-client по умолчанию использует Native TCP (порт 9000)
clickhouse-client --host localhost --port 9000 --query "SELECT count() FROM events"

# Python: clickhouse-driver использует Native TCP
from clickhouse_driver import Client
client = Client('localhost', port=9000)
result = client.execute("SELECT count() FROM events")

Характеристики:

  • Бинарный протокол, минимальный overhead на сериализацию
  • Колоночная передача данных (Native format)
  • Поддержка сжатия (lz4, zstd) на уровне протокола
  • Streaming результатов (не буферизует весь ответ в памяти)
  • Используется для server-to-server: Distributed queries, репликация

HTTP (порт 8123)

HTTP-интерфейс — REST-like API, совместимый с любым HTTP-клиентом:

# Простой запрос через curl
curl 'http://localhost:8123/?query=SELECT+1'

# Запрос с результатом в JSONEachRow
curl 'http://localhost:8123/?query=SELECT+user_id,+event_type+FROM+events+FORMAT+JSONEachRow'

# POST с телом запроса
curl -X POST 'http://localhost:8123/' \
  --data "SELECT count() FROM events FORMAT JSON"

# Проверка здоровья (monitoring-friendly)
curl 'http://localhost:8123/?query=SELECT+1'
# Ответ: 1

Характеристики:

  • Работает с любым HTTP-клиентом: curl, httpx, requests, wget
  • JDBC/ODBC-драйверы часто используют HTTP-интерфейс
  • Поддерживает все FORMAT-ы (JSONEachRow, CSV, Parquet, Arrow)
  • Подходит для мониторинга: простой healthcheck через ?query=SELECT+1
  • Загрузка больших файлов через multipart POST

MySQL wire protocol (порт 9004)

ClickHouse поддерживает MySQL wire protocol — клиенты, написанные для MySQL, могут подключаться к ClickHouse без изменений:

<!-- /etc/clickhouse-server/config.d/mysql_port.xml -->
<clickhouse>
    <mysql_port>9004</mysql_port>
</clickhouse>

После включения MySQL-совместимые клиенты подключаются напрямую:

# MySQL client подключается к ClickHouse
mysql --host=localhost --port=9004 --user=default --password='' -e "SELECT count() FROM events"

# Grafana: добавить ClickHouse как MySQL-источник (host:9004)
# Metabase, Superset, Redash: MySQL connector → ClickHouse

Используйте, когда: нужна совместимость с BI-инструментами, поддерживающими только MySQL (Grafana MySQL source, старые JDBC-драйверы).


PostgreSQL wire protocol (порт 9005)

Аналогично MySQL wire protocol, ClickHouse поддерживает PostgreSQL wire protocol:

<!-- /etc/clickhouse-server/config.d/pg_port.xml -->
<clickhouse>
    <postgresql_port>9005</postgresql_port>
</clickhouse>
# psql подключается к ClickHouse как к PostgreSQL
psql -h localhost -p 9005 -U default -c "SELECT count() FROM events"

# Python psycopg2 подключается к ClickHouse
import psycopg2
conn = psycopg2.connect(host='localhost', port=9005, database='default', user='default', password='')

Используйте, когда: нужна совместимость с PostgreSQL-совместимыми клиентами и BI-инструментами (pgAdmin, DBeaver с PostgreSQL-драйвером).


Сравнение протоколов

Протоколы ClickHouse: выбор по сценарию
ПротоколЗаголовок: протокол — название протокола подключения.
ПортПорт: номер TCP-порта по умолчанию.
СкоростьСкорость: относительная производительность. Native — максимальная (бинарный колоночный). HTTP — немного медленнее из-за текстовой сериализации.
Use caseUse case: оптимальный сценарий применения протокола.
Native TCPNative TCP: бинарный протокол ClickHouse. Колоночная передача данных (Native format). Поддерживает streaming, lz4/zstd сжатие. Используется clickhouse-client, clickhouse-driver (Python), go-clickhouse.
9000Порт 9000: стандартный Native TCP порт. Настраивается через tcp_port в config.xml. Используется clickhouse-client --port 9000.
МаксимальнаяNative TCP: самый быстрый протокол. Бинарный колоночный формат, lz4/zstd сжатие, streaming без буферизации. Минимальный overhead на сериализацию.
CLI + server-serverNative TCP: clickhouse-client CLI, server-to-server (Distributed queries, репликация), Python-драйверы (clickhouse-driver). Оптимален для высоконагруженных аналитических запросов.
HTTPHTTP: REST-like API на порту 8123. Поддерживает все FORMAT-ы (JSONEachRow, CSV, Parquet, Arrow). Работает с curl, httpx, requests. JDBC/ODBC-драйверы часто используют HTTP.
8123Порт 8123: HTTP-интерфейс ClickHouse. Настраивается через http_port в config.xml. Healthcheck: curl http://localhost:8123/?query=SELECT+1.
ВысокаяHTTP: чуть медленнее Native из-за HTTP overhead и текстовой сериализации (для JSON/CSV). Для бинарных форматов (Arrow, Parquet) разница меньше. Для мониторинга и REST API разница несущественна.
REST API / JDBCHTTP: REST API, curl, JDBC/ODBC через HTTP, monitoring healthcheck, загрузка файлов через multipart POST. Универсальный вариант для любого HTTP-клиента.
MySQL wireMySQL wire: ClickHouse притворяется MySQL-сервером. MySQL-совместимые клиенты подключаются на порт 9004. Включается через mysql_port в config.xml. Совместим с MySQL JDBC-драйвером.
9004Порт 9004: MySQL wire protocol порт. Включается в config.xml через mysql_port элемент. По умолчанию выключен.
СредняяMySQL wire: производительность ограничена MySQL-протоколом (row-based). Для BI-инструментов разница несущественна.
BI tools (MySQL compat)MySQL wire: BI-инструменты с MySQL-коннектором (Grafana MySQL source, Metabase, Superset), legacy MySQL-клиенты, mysql CLI. Не нужно устанавливать специфичный ClickHouse-драйвер.
PostgreSQL wirePostgreSQL wire: ClickHouse притворяется PostgreSQL-сервером на порту 9005. Включается через postgresql_port в config.xml. Совместим с psql, psycopg2, pgAdmin, DBeaver (PostgreSQL driver).
9005Порт 9005: PostgreSQL wire protocol порт. Включается в config.xml через postgresql_port элемент. По умолчанию выключен.
СредняяPostgreSQL wire: аналогично MySQL wire — ограничена row-based протоколом PostgreSQL. Для BI-инструментов разница несущественна.
BI tools (PG compat)PostgreSQL wire: psql CLI, psycopg2, pgAdmin, DBeaver с PostgreSQL-драйвером. Полезен если инфраструктура уже настроена под PostgreSQL-совместимые подключения.

Когда выбирать какой протокол

Native TCP (9000):

  • clickhouse-client в CLI
  • Server-to-server: Distributed queries, INSERT от другого ClickHouse
  • Python (clickhouse-driver) для максимальной производительности

HTTP (8123):

  • Любой HTTP-клиент без специализированного драйвера
  • JDBC/ODBC через clickhouse-java или clickhouse-native-jdbc
  • Мониторинг и healthcheck
  • REST API для веб-приложений

MySQL wire (9004):

  • BI-инструменты, поддерживающие только MySQL: Grafana MySQL source
  • Существующая инфраструктура с MySQL-драйверами
  • Не нужно устанавливать специфичный ClickHouse-драйвер

PostgreSQL wire (9005):

  • psql CLI и PostgreSQL-совместимые клиенты
  • pgAdmin, DBeaver с PostgreSQL-профилем
  • Инфраструктура, стандартизованная на PostgreSQL-совместимых подключениях

Ключевые выводы

  1. ClickHouse поддерживает четыре протокола подключения: Native TCP (9000), HTTP (8123), MySQL wire (9004), PostgreSQL wire (9005).
  2. Native TCP — самый быстрый: бинарный колоночный формат, lz4/zstd сжатие, streaming без буферизации.
  3. HTTP (8123) — универсальный: работает с curl, JDBC/ODBC, REST API, мониторингом.
  4. MySQL (9004) и PostgreSQL (9005) wire protocols выключены по умолчанию, включаются через mysql_port/postgresql_port в config.xml.
  5. Для BI-инструментов (Grafana, Metabase) используй MySQL wire protocol если нет нативного ClickHouse-коннектора.
OLAP SaaS платформы: протоколы подключения и интеграционные паттерны Trino connector architecture: JDBC и native protocol adapters

Проверьте понимание

Результат: 0 из 0
Прикладной
Вопрос 1 из 3. Разработчик хочет выполнить простой healthcheck запрос к ClickHouse через curl для системы мониторинга. Какой порт и URL-паттерн правильный?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 11