<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ClickHouse 最近跟Es杠上了,日志場景誰更適合

          共 15871字,需瀏覽 32分鐘

           ·

          2022-08-01 02:41

          點擊上方藍色字體,選擇“設(shè)為星標”


          回復(fù)”學(xué)習資料“獲取學(xué)習寶典

          文章來源:https://c1n.cn/yoNYE


          目錄
          • 背景

          • Elasticsearch vs ClickHouse

          • 成本分析

          • 環(huán)境部署

          • 總結(jié)


          背景


          saas 服務(wù)未來會面臨數(shù)據(jù)安全、合規(guī)等問題。公司的業(yè)務(wù)需要沉淀一套私有化部署能力,幫助業(yè)務(wù)提升行業(yè)競爭力。


          為了完善平臺系統(tǒng)能力、我們需要沉淀一套數(shù)據(jù)體系幫助運營分析活動效果、提升運營能力。


          然而在實際的開發(fā)過程中,如果直接部署一套大數(shù)據(jù)體系,對于使用者來說將是一筆比較大的服務(wù)器開銷。為此我們選用折中方案完善數(shù)據(jù)分析能力。


          Elasticsearch vs ClickHouse


          ClickHouse 是一款高性能列式分布式數(shù)據(jù)庫管理系統(tǒng),我們對 ClickHouse 進行了測試,發(fā)現(xiàn)有下列優(yōu)勢:


          ①ClickHouse 寫入吞吐量大


          單服務(wù)器日志寫入量在 50MB 到 200MB/s,每秒寫入超過 60w 記錄數(shù),是 ES 的 5 倍以上。


          在 ES 中比較常見的寫 Rejected 導(dǎo)致數(shù)據(jù)丟失、寫入延遲等問題,在 ClickHouse 中不容易發(fā)生。


          ②查詢速度快


          官方宣稱數(shù)據(jù)在 pagecache 中,單服務(wù)器查詢速率大約在 2-30GB/s;沒在 pagecache 的情況下,查詢速度取決于磁盤的讀取速率和數(shù)據(jù)的壓縮率。經(jīng)測試 ClickHouse 的查詢速度比 ES 快 5-30 倍以上。


          ③ClickHouse 比 ES 服務(wù)器成本更低


          一方面 ClickHouse 的數(shù)據(jù)壓縮比比 ES 高,相同數(shù)據(jù)占用的磁盤空間只有 ES 的 1/3 到 1/30,節(jié)省了磁盤空間的同時,也能有效的減少磁盤 IO,這也是ClickHouse查詢效率更高的原因之一。


          另一方面 ClickHouse 比 ES 占用更少的內(nèi)存,消耗更少的 CPU 資源。我們預(yù)估用 ClickHouse 處理日志可以將服務(wù)器成本降低一半。

          成本分析


          備注:在沒有任何折扣的情況下,基于 aliyun 分析。

          環(huán)境部署


          | zookeeper 集群部署


          yum install java-1.8.0-openjdk-devel.x86_64
          /etc/profile 配置環(huán)境變量
          更新系統(tǒng)時間
          yum install  ntpdate
          ntpdate asia.pool.ntp.org

          mkdir zookeeper
          mkdir ./zookeeper/data
          mkdir ./zookeeper/logs

          wget  --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz
          tar -zvxf apache-zookeeper-3.7.1-bin.tar.gz -C /usr/zookeeper

          export ZOOKEEPER_HOME=/usr/zookeeper/apache-zookeeper-3.7.1-bin
          export PATH=$ZOOKEEPER_HOME/bin:$PATH

          進入ZooKeeper配置目錄
          cd $ZOOKEEPER_HOME/conf

          新建配置文件
          vi zoo.cfg

          tickTime=2000
          initLimit=10
          syncLimit=5
          dataDir=/usr/zookeeper/data
          dataLogDir=/usr/zookeeper/logs
          clientPort=2181
          server.1=zk1:2888:3888
          server.2=zk2:2888:3888
          server.3=zk3:2888:3888

          在每臺服務(wù)器上執(zhí)行,給zookeeper創(chuàng)建myid
          echo "1" > /usr/zookeeper/data/myid
          echo "2" > /usr/zookeeper/data/myid
          echo "3" > /usr/zookeeper/data/myid

          進入ZooKeeper bin目錄
          cd $ZOOKEEPER_HOME/bin
          sh zkServer.sh start


          | Kafka 集群部署

          mkdir -p /usr/kafka
          chmod 777 -R /usr/kafka
          wget  --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/3.2.0/kafka_2.12-3.2.0.tgz
          tar -zvxf kafka_2.12-3.2.0.tgz -C /usr/kafka


          不同的broker Id 設(shè)置不一樣,比如 1,2,3
          broker.id=1
          listeners=PLAINTEXT://ip:9092
          socket.send.buffer.bytes=102400
          socket.receive.buffer.bytes=102400
          socket.request.max.bytes=104857600
          log.dir=/usr/kafka/logs
          num.partitions=5
          num.recovery.threads.per.data.dir=3
          offsets.topic.replication.factor=2
          transaction.state.log.replication.factor=3
          transaction.state.log.min.isr=3
          log.retention.hours=168
          log.segment.bytes=1073741824
          log.retention.check.interval.ms=300000
          zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
          zookeeper.connection.timeout.ms=30000
          group.initial.rebalance.delay.ms=0

          后臺常駐進程啟動kafka
          nohup /usr/kafka/kafka_2.12-3.2.0/bin/kafka-server-start.sh /usr/kafka/kafka_2.12-3.2.0/config/server.properties   >/usr/kafka/logs/kafka.log >&1 &

          /usr/kafka/kafka_2.12-3.2.0/bin/kafka-server-stop.sh

          $KAFKA_HOME/bin/kafka-topics.sh --list --bootstrap-server  ip:9092

          $KAFKA_HOME/bin/kafka-console-consumer.sh --bootstrap-server ip:9092 --topic test --from-beginning

          $KAFKA_HOME/bin/kafka-topics.sh  --create --bootstrap-server  ip:9092  --replication-factor 2 --partitions 3 --topic xxx_data


          | FileBeat 部署

          sudo rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

          Create a file with a .repo extension (for example, elastic.repo) in your /etc/yum.repos.d/ directory and add the following lines:
          在/etc/yum.repos.d/ 目錄下創(chuàng)建elastic.repo

          [elastic-8.x]
          name=Elastic repository for 8.x packages
          baseurl=https://artifacts.elastic.co/packages/8.x/yum
          gpgcheck=1
          gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
          enabled=1
          autorefresh=1
          type=rpm-md

          yum install filebeat
          systemctl enable filebeat
          chkconfig --add filebeat


          FileBeat 配置文件說明,坑點 1(需設(shè)置 keys_under_root: true)。 如果不設(shè)置kafka 的消息字段如下:


          文件目錄: /etc/filebeat/filebeat.yml

          filebeat.inputs:
          typelog
            enabled: true
            paths:
              - /root/logs/xxx/inner/*.log
            json:  
          如果不設(shè)置該索性,所有的數(shù)據(jù)都存儲在message里面,這樣設(shè)置以后數(shù)據(jù)會平鋪。
                 keys_under_root: true 
          output.kafka:
            hosts: ["kafka1:9092""kafka2:9092""kafka3:9092"]
            topic: 'xxx_data_clickhouse'
            partition.round_robin:
                      reachable_only: false
                      required_acks: 1
                      compression: gzip
          processors: 
          剔除filebeat 無效的字段數(shù)據(jù)
              - drop_fields:  
                  fields: ["input""agent""ecs""log""metadata""timestamp"]
                  ignore_missing: false

          nohup ./filebeat -e -c /etc/filebeat/filebeat.yml > /user/filebeat/filebeat.log & 
          輸出到filebeat.log文件中,方便排查


          | clickhouse 部署


          檢查當前CPU是否支持SSE 4.2,如果不支持,需要通過源代碼編譯構(gòu)建
          grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
          返回 "SSE 4.2 supported" 表示支持,返回 "SSE 4.2 not supported" 表示不支持

          創(chuàng)建數(shù)據(jù)保存目錄,將它創(chuàng)建到大容量磁盤掛載的路徑
          mkdir -p /data/clickhouse
          修改/etc/hosts文件,添加clickhouse節(jié)點
          舉例:
          10.190.85.92 bigdata-clickhouse-01
          10.190.85.93 bigdata-clickhouse-02

          服務(wù)器性能參數(shù)設(shè)置:
          cpu頻率調(diào)節(jié),將CPU頻率固定工作在其支持的最高運行頻率上,而不動態(tài)調(diào)節(jié),性能最好
          echo 'performance' | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

          內(nèi)存調(diào)節(jié),不要禁用 overcommit
          echo 0 | tee /proc/sys/vm/overcommit_memory

          始終禁用透明大頁(transparent huge pages)。 它會干擾內(nèi)存分配器,從而導(dǎo)致顯著的性能下降
          echo 'never' | tee /sys/kernel/mm/transparent_hugepage/enabled

          首先,需要添加官方存儲庫:
          yum install yum-utils
          rpm --import <https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG>
          yum-config-manager --add-repo <https://repo.clickhouse.tech/rpm/stable/x86_64>

          查看clickhouse可安裝的版本:
          yum list | grep clickhouse
          運行安裝命令:
          yum -y install clickhouse-server clickhouse-client

          修改/etc/clickhouse-server/config.xml配置文件,修改日志級別為information,默認是trace
          <level>information</level>
          執(zhí)行日志所在目錄:

          正常日志
          /var/log/clickhouse-server/clickhouse-server.log
          異常錯誤日志
          /var/log/clickhouse-server/clickhouse-server.err.log

          查看安裝的clickhouse版本:
          clickhouse-server --version
          clickhouse-client --password

          sudo clickhouse stop
          sudo clickhouse tart
          sudo clickhouse start


          clickhouse 部署過程中遇到的一些問題如下:

          ①clickhouse 創(chuàng)建 kafka 引擎表:

          CREATE TABLE default.kafka_clickhouse_inner_log ON CLUSTER clickhouse_cluster (
              log_uuid   String ,
              date_partition   UInt32 ,
              event_name   String ,
              activity_name   String ,
              activity_type   String ,
              activity_id   UInt16 
          ENGINE = Kafka SETTINGS
              kafka_broker_list = 'kafka1:9092,kafka2:9092,kafka3:9092',
              kafka_topic_list = 'data_clickhouse',
              kafka_group_name = 'clickhouse_xxx',
              kafka_format = 'JSONEachRow',
              kafka_row_delimiter = '\n',
              kafka_num_consumers = 1;


          問題 1:clikhouse 客戶端無法查詢 kafka 引擎表

          Direct select is not allowed. To enable use setting stream_like_engine_allow_direct_select.(QUERY_NOT_ALLOWED) (version 22.5.2.53 (official build))


          解決方案:

           需要在clickhouse client 創(chuàng)建加上 --stream_like_engine_allow_direct_select 1

           clickhouse-client --stream_like_engine_allow_direct_select 1 --password xxxxx


          ②clickhouse 創(chuàng)建本地節(jié)點表


          問題 2:無法開啟本地表 macro

          Code: 62. DB::Exception: There was an error on [10.74.244.57:9000]: Code: 62. DB::Exception: No macro 'shard' in config while processing substitutions in '/clickhouse/tables/default/bi_inner_log_local/{shard}' at '50' or macro is not supported here. (SYNTAX_ERROR) (version 22.5.2.53 (official build)). (SYNTAX_ERROR) (version 22.5.2.53 (official build))


          創(chuàng)建本地表(使用復(fù)制去重表引擎)
          create table default.bi_inner_log_local ON CLUSTER clickhouse_cluster (
              log_uuid   String ,
              date_partition   UInt32 ,
              event_name   String ,
              activity_name   String ,
              credits_bring   Int16 ,
              activity_type   String ,
              activity_id   UInt16 
          ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/default/bi_inner_log_local/{shard}','{replica}')
            PARTITION BY date_partition
            ORDER BY (event_name,date_partition,log_uuid)
             SETTINGS index_granularity = 8192;


          解決方案:在不同的 clickhouse 節(jié)點上配置不同的 shard,每一個節(jié)點的 shard 名稱不能一致。

           <macros>
                  <shard>01</shard>
                  <replica>example01-01-1</replica>
              </macros>


          問題 3:clickhouse 中節(jié)點數(shù)據(jù)已經(jīng)存在

          Code: 253. DB::Exception: There was an error on : Code: 253. DB::Exception: Replica /clickhouse/tables/default/bi_inner_log_local/01/replicas/example01-01-1 already exists. (REPLICA_IS_ALREADY_EXIST) (version 22.5.2.53 (official build)). (REPLICA_IS_ALREADY_EXIST) (version 22.5.2.53 (official build))


          解決方案:進入 zookeeper 客戶端刪除相關(guān)節(jié)點,然后再重新創(chuàng)建 ReplicatedReplacingMergeTree 表。這樣可以保障每一個 clickhouse 節(jié)點都會去消費 kafka partition 的數(shù)據(jù)。


          ③clickhouse 創(chuàng)建集群表


          創(chuàng)建分布式表(根據(jù) log_uuid 對數(shù)據(jù)進行分發(fā),相同的 log_uuid 會發(fā)送到同一個 shard 分片上,用于后續(xù)合并時的數(shù)據(jù)去重):
          CREATE TABLE default.bi_inner_log_all ON CLUSTER clickhouse_cluster AS default.bi_inner_log_local
          ENGINE = Distributed(clickhouse_cluster, default, bi_inner_log_local, xxHash32(log_uuid));


          問題 4:分布式集群表無法查詢

          Code: 516. DB::Exception: Received from 10.74.244.57:9000. DB::Exception: default: Authentication failed: password is incorrect or there is no user with such name. (AUTHENTICATION_FAILED) (version 22.5.2.53 (official build))


          解決方案:

           <!--分布式表配置-->
           <remote_servers>
                 <clickhouse_cluster> <!--集群名稱, 可以自定義, 后面在新建庫、表的時候需要用到集群名稱-->
               <shard>
              <!--內(nèi)部復(fù)制(默認false), 開啟后, 在分布式表引擎下, 數(shù)據(jù)寫入時-->
                                  <!--每個分片只會去尋找一個節(jié)點寫, 并不是每個都寫-->
                                  <internal_replication>true</internal_replication>
                                  <replica>
                                      <host>ip1</host>
                                      <port>9000</port>
                                              <user>default</user>
                                              <password>xxxx</password>
                                  </replica>
                              </shard>
                              <shard>
                                  <internal_replication>true</internal_replication>
                                  <replica>
                                      <host>ip2</host>
                                      <port>9000</port>
                                              <user>default</user>
                                              <password>xxxx</password>
                                  </replica>
                              </shard>
                          </clickhouse_cluster>
                  </remote_servers>


          ④clickhouse 創(chuàng)建物化視圖


          創(chuàng)建物化視圖,把 Kafka 消費表消費的數(shù)據(jù)同步到 ClickHouse 分布式表。
          CREATE MATERIALIZED VIEW default.view_bi_inner_log ON CLUSTER clickhouse_cluster TO default.bi_inner_log_all AS 
          SELECT 
              log_uuid ,
          date_partition ,
          event_name ,
          activity_name ,
          credits_bring ,
          activity_type ,
          activity_id 
          FROM default.kafka_clickhouse_inner_log;


          小結(jié):功夫不負有心人,解決完以上所有的問題。數(shù)據(jù)流轉(zhuǎn)通了!本文所有組件都是比較新的版本,所以過程中問題的解決基本都是官方文檔或操作手冊一步一步的解決。

          總結(jié)一句話:遇到問題去官方文檔或--help 去嘗試解決,慢慢的你就會升華。


          總結(jié)


          整個部署的過程踩了不少坑,尤其是 filebeat yml 的參數(shù)設(shè)置和 clickhouse 的配置說明。


          很久沒有更新博客了,經(jīng)常看到博客 35 歲以后怎么辦的問題。說實話我自己也沒想好以后怎么辦,核心還是持續(xù)的學(xué)習&輸出。不斷的構(gòu)建自己的護城河,不管是技術(shù)專家、業(yè)務(wù)專家、架構(gòu)、管理等。


          個人建議如果能持續(xù)寫代碼就奮戰(zhàn)在一線,管理徹底與公司綁定。除非你是有名的大廠,這另外看。


          如果所在的公司缺乏較大的行業(yè)影響力,個人感覺可以奮戰(zhàn)在一線,未來選擇新的工作。考量更多的還是行業(yè)影響、商業(yè) sense、技術(shù)架構(gòu)能力?,F(xiàn)在的我已 35,從容的面對每一天。


          -------------  END  -------------
          掃描下方二維碼,加入技術(shù)群。暗號:加群

          瀏覽 56
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲插逼色 | 亚洲视频在线观看不卡 | 91国產乱老熟 | 国产一卡二卡三卡在线观看 | 水蜜桃AV无码 |