184 похожих чатов

Ситуация: 1. есть настроенный рабочий контейнер с kafka. Сообщения в него

пишутся, из него всё читается. с ним работают kafka-manager, zookeeper из скоих контейнеров и десятки программ из локального окружения (windows). Т.е. рабочий вариант
2. разворачиваю контейнер clickhouse:
docker run -d --name md-clickhouse -p 8123:8123 --ulimit nofile=262144:262144 -v=e:/.docker-mount/storage/clickhouse:/var/lib/clickhouse -v=e:/dev/_clickhouse/initdb.d:/docker-entrypoint-initdb.d -v=e:/dev/_clickhouse/logs:/var/log/clickhouse-server yandex/clickhouse-server

в результате на старте контейнера из папки docker-entrypoint-initdb.d исполняется 0001_init.sql.
Исполняется без ошибок. Clickhouse стартует, всё, что должно создаться, создаётся

В числе прочего в этом файле создаётся таблица с движком Kafka, типа такой (опущены некоторые столбцы):
create table auditTrail.SpanBuffer
(
async_trace_id UUID,
type UInt8
)
ENGINE = Kafka
SETTINGS kafka_broker_list = 'host.docker.internal:9092',
kafka_topic_list = 'Topic.Name',
kafka_group_name = 'Group.Clickhouse.Kafka.Engine',
kafka_format = 'JSONEachRow',
kafka_max_block_size = 1048576;

Но в логах clickhouse видно, что соединиться он пытается по 127.0.0.1:9092:

2021.10.13 12:59:14.091724 [ 57 ] {} <Warning> Context: Effective user of the process (clickhouse) does not match the owner of the data (root).
2021.10.13 12:59:17.967427 [ 228 ] {} <Error> StorageKafka (SpanBuffer): [rdk:FAIL] [thrd:GroupCoordinator]: GroupCoordinator: 127.0.0.1:9092: Connect to ipv4#127.0.0.1:9092 failed: Connection refused (after 0ms in state CONNECT)
2021.10.13 12:59:17.968299 [ 212 ] {} <Error> StorageKafka (SpanBuffer): [rdk:ERROR] [thrd:app]: ClickHouse-2ca3cfcc592b-auditTrail-SpanBuffer#consumer-1: GroupCoordinator: 127.0.0.1:9092: Connect to ipv4#127.0.0.1:9092 failed: Connection refused (after 0ms in state CONNECT)

что я делаю не так, как заставить clickhouse подключаться через host.docker.internal:9092?

8 ответов

36 просмотров

вам сеть надо общую создать и запускать контейнеры указав эту сеть https://runnable.com/docker/basic-docker-networking

Alex-Spiridonov Автор вопроса
Denny [Altinity]
вам сеть надо общую создать и запускать контейнеры...

разве host.docker.internal не решает эту проблему за меня (хотя для целей локальной разработки, не берём сейчас продакшн)? почему clickhouse судя по логам и не пытается использовать host.docker.internal, а обращается к 127.0.0.1?

Alex Spiridonov
разве host.docker.internal не решает эту проблему ...

я хз про host.docker.internal, все это зависит от оси, в линуксе может и будет работать

Alex Spiridonov
разве host.docker.internal не решает эту проблему ...

это не имеет отношения к КХ, если вы подключитесь в контейнер кх, то можете там проверить курлом например ping host.docker.internal , curl host.docker.internal:9092

Alex-Spiridonov Автор вопроса
Denny [Altinity]
это не имеет отношения к КХ, если вы подключитесь ...

root@ffacb257f26f:/# curl 127.0.0.1:9092 curl: (7) Failed to connect to 127.0.0.1 port 9092: Connection refused root@ffacb257f26f:/# curl host.docker.internal:9092 curl: (52) Empty reply from server root@ffacb257f26f:/# ping host.docker.internal PING host.docker.internal (192.168.65.2) 56(84) bytes of data. 64 bytes from 192.168.65.2 (192.168.65.2): icmp_seq=1 ttl=37 time=0.460 ms есть ощушение, что если бы clickhouse обращался по host.docker.internal, а не по 127.0.0.1, то всё бы заработало

Alex Spiridonov
root@ffacb257f26f:/# curl 127.0.0.1:9092 curl: (7)...

с кафкой есть такая проблема, что это адрес host.docker.internal:9092 service discovery. Дальше брокер говорит откуда забирать партиции этого топика, там в кафке настраивается какой хостнейм отдавать. Т.е. брокеров много, и куда ходить за партициями топика знают только сами брокеры, клиенту кафки надо знать только одну точку входа, дальше ему рассказывают где вещи лежат. возможно в вашем случае кафка говорит ходить в локалхост

Alex-Spiridonov Автор вопроса
Denny [Altinity]
с кафкой есть такая проблема, что это адрес host.d...

я сейчас пересобрал контейнер, указав вместо host.docker.internal:9092 вообще заведомо некорректное значение: engine = Kafka SETTINGS kafka_broker_list = 'some.invalid.address:9999' в логах ничего не поменялось: 2021.10.13 14:25:55.984670 [ 220 ] {} <Error> StorageKafka (SpanBuffer): [rdk:FAIL] [thrd:GroupCoordinator]: GroupCoordinator: 127.0.0.1:9092: Connect to ipv4#127.0.0.1:9092 failed: Connection refused (after 0ms in state CONNECT) т.е. до использования указанного адреса дело даже не доходит, а clickhouse что-то пытается найти локально на порту 9092 p.s. проверил DDL таблицы - там именно то, что я указал при создании контейнера. Т.е. в kafka_broker_list значение одно, а в логах другое. непонятное что-то

Alex-Spiridonov Автор вопроса
Denny [Altinity]
с кафкой есть такая проблема, что это адрес host.d...

это было оно! Неверное значение advertised.listeners в настройках кафки. Спасибо за наводку!

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта