{
    "version": "https:\/\/jsonfeed.org\/version\/1",
    "title": "Блог об аналитике, визуализации данных, data science и BI, заметки с тегом: expert",
    "home_page_url": "http:\/\/test.leftjoin.ru\/tags\/expert\/",
    "feed_url": "http:\/\/test.leftjoin.ru\/tags\/expert\/json\/",
    "icon": "http:\/\/test.leftjoin.ru\/user\/userpic@2x.jpg",
    "author": {
        "name": "Николай Валиотти",
        "url": "http:\/\/test.leftjoin.ru\/",
        "avatar": "http:\/\/test.leftjoin.ru\/user\/userpic@2x.jpg"
    },
    "items": [
        {
            "id": "34",
            "url": "http:\/\/test.leftjoin.ru\/all\/clickhouse-as-a-consumer-to-amazon-msk\/",
            "title": "Clickhouse в качестве consumer для Amazon MSK",
            "content_html": "<p class=\"note\"><b>Disclaimer<\/b>: заметка носит технический характер, поэтому может быть интересна меньшему числу лиц с бизнес-бэкграундом.<\/p>\n<p>В этом блоге еще ни разу не затрагивалась тема <a href=\"https:\/\/clickhouse.yandex\/\">Clickhouse<\/a>, одной из самых быстрых баз данных от компании Яндекс. Краткая справка без деталей: Clickhouse — <a href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/463665\/\">наиболее эффективно написанная СУБД<\/a> колоночного типа с точки зрения программного кода, информация о СУБД довольно <a href=\"https:\/\/clickhouse.tech\/docs\/ru\/\">подробно описана в документации<\/a> и во множестве видео на Youtube (<a href=\"https:\/\/www.youtube.com\/watch?v=bSyQahMVZ7w\">раз<\/a>, <a href=\"https:\/\/www.youtube.com\/watch?v=Ac2C2G2g8Cg\">два<\/a>, <a href=\"https:\/\/www.youtube.com\/watch?v=ltg8vstuHUU\">три<\/a>).<\/p>\n<p>В своей практике последние четыре года я использовал Clickhouse в качестве аналитика и эксперта по построению аналитической отчетности. В основном для решения задачи визуализации отчетности \/ отчетов с параметрами \/ дашбордов использовался <a href=\"all\/redash-polnocennaya-on-demand-analitika\/\">Redash<\/a> как наиболее удобный интерфейс для доступа к данным Clickhouse.<br \/>\nОднако совсем недавно в Looker, <a href=\"all\/looker-overview\/\">о котором я рассказывал ранее<\/a>, появилась возможность подключить Clickhouse в качестве источника данных. Следует заметить, что подключение к Clickhouse в Tableau существует уже довольно давно.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"http:\/\/test.leftjoin.ru\/pictures\/setup-clickhouse-new-connection-624@2x.png\" width=\"635\" height=\"761\" alt=\"\" \/>\n<\/div>\n<p>Архитектура аналитического сервиса, в основе которого лежит Clickhouse, в основном облачная. И в рассматриваемой задаче было именно так. Предположим, у вас существует выделенный instance EC2 в Amazon (на который вы установили Clickhouse) и отдельный Kafka-кластер (решение <a href=\"https:\/\/aws.amazon.com\/ru\/msk\/\">Amazon MSK<\/a>).<\/p>\n<p><b>Задача<\/b>: подключить Clickhouse в качестве <i>consumer<\/i> для получения информации с брокеров вашего кластера Kafka. На самом деле, в документации на сайте Amazon MSK довольно подробно описано <a href=\"https:\/\/docs.aws.amazon.com\/msk\/latest\/developerguide\/create-client-machine.html\">как именно подключаться к кластеру Kafka<\/a>, не буду дублировать эту информацию. В моем случае гайд помог: топики создавались продюсером с машины, на которой установлен Clickhouse и с неё читались консюмером.<\/p>\n<p>Но возникла проблема: при <a href=\"https:\/\/clickhouse.tech\/docs\/ru\/operations\/table_engines\/kafka\/\">подключении Clickhouse к Kafka в качестве консюмера<\/a>, происходила следующая ошибка:<\/p>\n<pre class=\"e2-text-code\"><code>020.02.02 18:01:56.209132 [ 46 ] {e7124cd5-2144-4b1d-bd49-8a410cdbd607} &lt;Error&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):<\/code><\/pre><p>Продолжительное время я искал информацию в документации Clickhouse о том, что может вызывать эту ошибку, но не смог ничего найти. Следующей мыслью стала проверка работы локального брокера Kafka с той же машины. Установил клиент Kafka, подключил Clickhouse, отправил данные в топик и Clickhouse с легкостью их прочитал, т. е. консюмер Clickhouse работает с локальным брокером, а значит и вовсе работает.<\/p>\n<p>Поговорив со всеми своими знакомыми экспертами в области инфраструктуры и Clickhouse (<a href=\"https:\/\/rebrainme.com\/devops\/\">Вася<\/a>, Макс, привет!), с ходу мы не смогли определить в чем проблема. Проверили firewall, настройки сети, все было открыто. Подтверждалось также тем, что с локальной машины можно было отправить в топик удаленного брокера Kafka сообщения командой <i>bin\/kafka-console-producer.sh<\/i> и прочитать оттуда же <i>bin\/kafka-console-consumer.sh<\/i>.<\/p>\n<p>Затем мне пришла в голову мысль обратиться к главному гуру и разработчику Clickhouse — Алексею Миловидову. Алексей с радостью постарался ответить на возникшие вопросы и предложил ряд гипотез, которые мы проверили (трассировку сетевых подключений и т. п.), однако и после более низкоуровневого аудита проблему локализовать не удалось. Тогда Алексей посоветовал обратиться к Михаилу Филимонову из компании <a href=\"https:\/\/www.altinity.com\/\">Altinity<\/a>. Михаил оказался очень отзывчивым экспертом и одну за другой предлагал гипотезы для проверки (параллельно подсказывая как именно будет лучше их проверить).<\/p>\n<p>В итоге в ходе совместных усилий мы обнаружили, что проблема возникает у библиотеки <i>librdkafka<\/i>, так как другой пакет <i>kafkacat<\/i>, который использует эту же библиотеку отваливается от подключения к брокеру с той же проблемой (<i>Local: timed out<\/i>).<\/p>\n<p>После изучения подключения через <i>bin\/kafka-console-consumer.sh<\/i> и параметров подключения, Михаил посоветовал добавить такую строку в \/<i>etc\/clickhouse-server\/config.xml<\/i>:<\/p>\n<pre class=\"e2-text-code\"><code>&lt;kafka&gt;&lt;security_protocol&gt;ssl&lt;\/security_protocol&gt;&lt;\/kafka&gt;<\/code><\/pre><p>И, о чудо! Clickhouse подключился к кластеру и вытянул необходимые данные с брокера.<\/p>\n<p>Надеюсь, этот рецепт и мой опыт позволит вам сэкономить время и силы на изучение похожей проблемы :)<\/p>\n",
            "date_published": "2020-02-04T11:55:18+03:00",
            "date_modified": "2020-05-10T17:39:24+03:00",
            "image": "http:\/\/test.leftjoin.ru\/pictures\/setup-clickhouse-new-connection-624@2x.png",
            "_date_published_rfc2822": "Tue, 04 Feb 2020 11:55:18 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "34",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css",
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": [
                    "http:\/\/test.leftjoin.ru\/pictures\/setup-clickhouse-new-connection-624@2x.png"
                ]
            }
        }
    ],
    "_e2_version": 3365,
    "_e2_ua_string": "E2 (v3365; Aegea)"
}