<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0">

<channel>

<title>Блог об аналитике, визуализации данных, data science и BI, заметки с тегом: expert</title>
<link>http://test.leftjoin.ru/tags/expert/</link>
<description></description>
<generator>E2 (v3365; Aegea)</generator>

<item>
<title>Clickhouse в качестве consumer для Amazon MSK</title>
<guid isPermaLink="false">34</guid>
<link>http://test.leftjoin.ru/all/clickhouse-as-a-consumer-to-amazon-msk/</link>
<comments>http://test.leftjoin.ru/all/clickhouse-as-a-consumer-to-amazon-msk/</comments>
<description>
&lt;p class="note"&gt;&lt;b&gt;Disclaimer&lt;/b&gt;: заметка носит технический характер, поэтому может быть интересна меньшему числу лиц с бизнес-бэкграундом.&lt;/p&gt;
&lt;p&gt;В этом блоге еще ни разу не затрагивалась тема &lt;a href="https://clickhouse.yandex/"&gt;Clickhouse&lt;/a&gt;, одной из самых быстрых баз данных от компании Яндекс. Краткая справка без деталей: Clickhouse — &lt;a href="https://habr.com/ru/company/otus/blog/463665/"&gt;наиболее эффективно написанная СУБД&lt;/a&gt; колоночного типа с точки зрения программного кода, информация о СУБД довольно &lt;a href="https://clickhouse.tech/docs/ru/"&gt;подробно описана в документации&lt;/a&gt; и во множестве видео на Youtube (&lt;a href="https://www.youtube.com/watch?v=bSyQahMVZ7w"&gt;раз&lt;/a&gt;, &lt;a href="https://www.youtube.com/watch?v=Ac2C2G2g8Cg"&gt;два&lt;/a&gt;, &lt;a href="https://www.youtube.com/watch?v=ltg8vstuHUU"&gt;три&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;В своей практике последние четыре года я использовал Clickhouse в качестве аналитика и эксперта по построению аналитической отчетности. В основном для решения задачи визуализации отчетности / отчетов с параметрами / дашбордов использовался &lt;a href="all/redash-polnocennaya-on-demand-analitika/"&gt;Redash&lt;/a&gt; как наиболее удобный интерфейс для доступа к данным Clickhouse.&lt;br /&gt;
Однако совсем недавно в Looker, &lt;a href="all/looker-overview/"&gt;о котором я рассказывал ранее&lt;/a&gt;, появилась возможность подключить Clickhouse в качестве источника данных. Следует заметить, что подключение к Clickhouse в Tableau существует уже довольно давно.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="http://test.leftjoin.ru/pictures/setup-clickhouse-new-connection-624@2x.png" width="635" height="761" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Архитектура аналитического сервиса, в основе которого лежит Clickhouse, в основном облачная. И в рассматриваемой задаче было именно так. Предположим, у вас существует выделенный instance EC2 в Amazon (на который вы установили Clickhouse) и отдельный Kafka-кластер (решение &lt;a href="https://aws.amazon.com/ru/msk/"&gt;Amazon MSK&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Задача&lt;/b&gt;: подключить Clickhouse в качестве &lt;i&gt;consumer&lt;/i&gt; для получения информации с брокеров вашего кластера Kafka. На самом деле, в документации на сайте Amazon MSK довольно подробно описано &lt;a href="https://docs.aws.amazon.com/msk/latest/developerguide/create-client-machine.html"&gt;как именно подключаться к кластеру Kafka&lt;/a&gt;, не буду дублировать эту информацию. В моем случае гайд помог: топики создавались продюсером с машины, на которой установлен Clickhouse и с неё читались консюмером.&lt;/p&gt;
&lt;p&gt;Но возникла проблема: при &lt;a href="https://clickhouse.tech/docs/ru/operations/table_engines/kafka/"&gt;подключении Clickhouse к Kafka в качестве консюмера&lt;/a&gt;, происходила следующая ошибка:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;020.02.02 18:01:56.209132 [ 46 ] {e7124cd5-2144-4b1d-bd49-8a410cdbd607} &amp;lt;Error&amp;gt; executeQuery: std::exception. Code: 1001, type: cppkafka::HandleException, e.what() = Local: Timed out, version = 20.1.2.4 (official build) (from 127.0.0.1:46586) (in query: SELECT * FROM events), Stack trace (when copying this message, always include the lines below):&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Продолжительное время я искал информацию в документации Clickhouse о том, что может вызывать эту ошибку, но не смог ничего найти. Следующей мыслью стала проверка работы локального брокера Kafka с той же машины. Установил клиент Kafka, подключил Clickhouse, отправил данные в топик и Clickhouse с легкостью их прочитал, т. е. консюмер Clickhouse работает с локальным брокером, а значит и вовсе работает.&lt;/p&gt;
&lt;p&gt;Поговорив со всеми своими знакомыми экспертами в области инфраструктуры и Clickhouse (&lt;a href="https://rebrainme.com/devops/"&gt;Вася&lt;/a&gt;, Макс, привет!), с ходу мы не смогли определить в чем проблема. Проверили firewall, настройки сети, все было открыто. Подтверждалось также тем, что с локальной машины можно было отправить в топик удаленного брокера Kafka сообщения командой &lt;i&gt;bin/kafka-console-producer.sh&lt;/i&gt; и прочитать оттуда же &lt;i&gt;bin/kafka-console-consumer.sh&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;Затем мне пришла в голову мысль обратиться к главному гуру и разработчику Clickhouse — Алексею Миловидову. Алексей с радостью постарался ответить на возникшие вопросы и предложил ряд гипотез, которые мы проверили (трассировку сетевых подключений и т. п.), однако и после более низкоуровневого аудита проблему локализовать не удалось. Тогда Алексей посоветовал обратиться к Михаилу Филимонову из компании &lt;a href="https://www.altinity.com/"&gt;Altinity&lt;/a&gt;. Михаил оказался очень отзывчивым экспертом и одну за другой предлагал гипотезы для проверки (параллельно подсказывая как именно будет лучше их проверить).&lt;/p&gt;
&lt;p&gt;В итоге в ходе совместных усилий мы обнаружили, что проблема возникает у библиотеки &lt;i&gt;librdkafka&lt;/i&gt;, так как другой пакет &lt;i&gt;kafkacat&lt;/i&gt;, который использует эту же библиотеку отваливается от подключения к брокеру с той же проблемой (&lt;i&gt;Local: timed out&lt;/i&gt;).&lt;/p&gt;
&lt;p&gt;После изучения подключения через &lt;i&gt;bin/kafka-console-consumer.sh&lt;/i&gt; и параметров подключения, Михаил посоветовал добавить такую строку в /&lt;i&gt;etc/clickhouse-server/config.xml&lt;/i&gt;:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;&amp;lt;kafka&amp;gt;&amp;lt;security_protocol&amp;gt;ssl&amp;lt;/security_protocol&amp;gt;&amp;lt;/kafka&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;И, о чудо! Clickhouse подключился к кластеру и вытянул необходимые данные с брокера.&lt;/p&gt;
&lt;p&gt;Надеюсь, этот рецепт и мой опыт позволит вам сэкономить время и силы на изучение похожей проблемы :)&lt;/p&gt;
</description>
<pubDate>Tue, 04 Feb 2020 11:55:18 +0300</pubDate>
</item>


</channel>
</rss>