当前位置: 首页 > 科技观察

替换ELK:ClickHouse+Kafka+FlieBeat是最好的

时间:2023-03-17 17:51:24 科技观察

1、后台Saas服务未来会面临数据安全、合规等问题。公司业务需要积累一套私有化部署能力,帮助业务提升行业竞争力。为了提升平台系统能力,我们需要积累一套数据系统,帮助运营分析活动效果,提升运营能力。但是在实际开发过程中,如果直接部署一个大数据系统,对于用户来说是一个比较大的服务器开销。为此,我们选择折中的方案来提升数据分析能力。2.ElasticsearchvsClickHouseClickHouse是一个高性能的列式分布式数据库管理系统。我们测试了ClickHouse,发现有以下优势:ClickHouse写入吞吐量大。单台服务器的日志写入量在50MB~200MB/s之间。秒写记录数超过60w,是ES的5倍多。ES中比较常见的写入Rejected导致数据丢失,写入延迟等问题,在ClickHouse中不容易发生。查询速度快官方称数据在pagecache中,单台服务器查询速度约为2-30GB/s;没有pagecache,查询速度取决于磁盘读取率和数据压缩率。经过测试,ClickHouse的查询速度比ES快5-30倍。ClickHouse的成本低于ES服务器。一方面,ClickHouse的数据压缩率比ES高。同样的数据占用的磁盘空间只有ES的1/3到1/30。在节省磁盘空间的同时,还能有效减少磁盘IO。这也是ClickHouse查询效率更高的原因之一。另一方面,ClickHouse比ES占用更少的内存和消耗更少的CPU资源。我们估计使用ClickHouse处理日志可以将服务器成本降低一半。3.成本分析以阿里云分析为准,无任何折扣。四、环境部署1、Zookeeper集群部署yuminstalljava-1.8.0-openjdk-devel.x86_64/etc/profile配置环境变量更新系统时间yuminstallntpdatetentpdateasia.pool.ntp.orgmkdirzookeepermkdir./zookeeper/datamkdir./zookeeper/logswget--no-check-certificatehttps://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gztar-zvxfapache-zookeeper-3.7.1-bin.tar.gz-C/usr/zookeeperexportZOOKEEPER_HOME=/usr/zookeeper/apache-zookeeper-3.7.1-binexportPATH=$ZOOKEEPER_HOME/bin:$PATH进入ZooKeeper配置目录cd$ZOOKEEPER_HOME/conf新建配置文件vizoo.cfgtickTime=2000initLimit=10syncLimit=5dataDir=/usr/zookeeper/datadataLogDir=/usr/zookeeper/logsclientPort=2181server.1=zk1:2888:3888server.2=zk2:2888:3888server.3=zk3:2888:3888在每个服务器上执行,createmyidecho"1">/usr/zookeeper/data/myidecho"2">/usr/zookeeper/data/myidecho"3">/usr/zookeeper/dataforzookeeper/myidE进入ZooKeeperbin目录cd$ZOOKEEPER_HOME/binshzkServer.shstart2,Kafka集群部署mkdir-p/usr/kafkachmod777-R/usr/kafkawget--no-check-certificatehttps://mirrors.tuna.tsinghua.edu.cn/apache/kafka/3.2.0/kafka_2.12-3.2.0.tgztar-zvxfkafka_2.12-3.2.0.tgz-C/usr/kafka不同的brokerId设置不同,比如1,2,3broker.id=1listeners=PLAINTEXT://ip:9092socket.send.buffer.bytes=102400socket.receive.buffer.bytes=102400socket.request.max.bytes=104857600log.dir=/usr/kafka/logsnum.partitions=5num.recovery.threads.per.data.dir=3offsets.topic.replication.factor=2transaction.state.log.replication.factor=3transaction.state.log.min.isr=3log.retention.hours=168log.segment.bytes=1073741824log.retention.check.interval.ms=300000zookeeper.connect=zk1:2181,zk2:2181,zk3:2181zookeeper.connection。timeout.ms=30000group.initial.rebalance.delay.ms=0后台常驻进程启动kafkanohup/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-serverip:9092$KAFKA_HOME/bin/kafka-console-consumer.sh--bootstrap-serverip:9092--topictest--from-beginning$KAFKA_HOME/bin/kafka-topics.sh--create--bootstrap-serverip:9092--replication-factor2--partitions3--topicxxx_data3、FileBeat部分sudorpm--importhttps://packages.elastic.co/GPG-KEY-elasticsearch在您的/etc/yum.repos.d/目录中创建一个扩展名为.repo的文件(例如elastic.repo)并添加以下行:在/etc/yum.repos.d/目录下创建elastic.repo[elastic-8.x]name=8.xpackagesbaseurl=https://artifacts.elastic.co/packages/8.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY的弹性存储库-elasticsearchenabled=1autorefresh=1type=rpm-mdyuminstallfilebeatsystemctlenablefilebeatchkconfig--addfilebeatFileBeat配置文件说明,坑点1(需要设置keys_under_root:true)如果不设置kafka的message字段如下:Filedirectory:/etc/filebeat/filebeat.ymlfilebeat.inputs:-type:logenabled:truepaths:-/root/logs/xxx/inner/*.logjson:如果不设置简单的说,所有数据都存储在消息中,这样设置后数据会被压扁。keys_under_root:trueoutput.kafka:hosts:["kafka1:9092","kafka2:9092","kafka3:9092"]主题:'xxx_data_clickhouse'partition.round_robin:reachable_only:falserequired_acks:1compression:gzipprocessors:removefilebeatinvalid字段数据-drop_fields:fields:["input","agent","ecs","log","metadata","timestamp"]ignore_missing:falsehup./filebeat-e-c/etc/filebeat/filebeat.yml>/user/filebeat/filebeat.log&输出到filebeat.log文件,方便排错4.Clickhouse部署检查当前CPU是否支持SSE4.2。如果没有,则需要编译构建源码grep-qsse4_2/proc/cpuinfo&&echo"SSE4.2supported"||echo"SSE4.2notsupported"返回"SSE4.2supported"表示支持,返回"SSE4.2notsupported"表示不支持创建数据存储目录,创建到大容量磁盘mountmkdir-p/data/clickhouse修改/etc/hosts文件,增加一个clickhouse节点示例:10.190.85.92bigdata-clickhouse-0110.190.85.93bigdata-clickhouse-02服务器性能参数设置:cpu频率调整,CPU频率固定为work在支持的最高工作频率下,无需动态调整,性能是最好的echo'performance'|三通/sys/devices/system/cpu/cpu*/cpufreq/scaling_governor内存调整,不禁用overcommitecho0|tee/proc/sys/vm/overcommit_memory始终禁用透明大页面它会干扰内存分配器,导致性能显着下降echo'never'|tee/sys/kernel/mm/transparent_hugepage/enabled首先需要添加官方仓库:yuminstallyum-utilsrpm--importyum-config-manager--add-repo查看clickhouse可以安装的版本:yumlist|grepclickhouse运行安装命令:yum-yinstallclickhouse-serverclickhouse-client修改/etc/clickhouse-server/config.xml配置文件,修改日志级别为information,默认为traceinformation执行日志所在目录:正常日志/var/log/clickhouse-server/clickhouse-server.log异常错误日志/var/log/clickhouse-server/clickhouse-server.err.log查看安装的clickhouse版本:clickhouse-server--versionclickhouse-client--passwordsudoclickhousestopsudoclickhousetartsudoclickhousestartclickhouse部署过程中遇到的一些问题如下:1)clickhouse创建kafka引擎表CREATETABLEdefault.kafka_clickhouse_inner_logONCLUSTERclickhouse_cluster(log_uuidString,date_partitionUInt32,event_name字符串,字符串活动activity_typeString,activity_idUInt16)ENGINE=Kafka设置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;问题一:clikhouse客户端无法查询kafka引擎表Directselectisnotallowed。开启使用设置stream_like_engine_allow_direct_select.(QUERY_NOT_ALLOWED)(version22.5.2.53(officialbuild))On--stream_like_engine_allow_direct_select1clickhouse-client--stream_like_engine_allow_direct_select1--passwordxxxxx2)Clickhousecreateslocalnodetable问题2:无法打开本地表macroCode:62.DB::Exception:[10.74.244.57:9000]上出现错误:代码:62.DB::Exception:在处理“/clickhouse/tables/default/bi_inner_log_local”中的替换时配置中没有宏“分片”/{shard}'at'50'或此处不支持宏。(SYNTAX_ERROR)(版本22.5.2.53(o官方构建))。(SYNTAX_ERROR)(version22.5.2.53(officialbuild))Createalocaltable(usingthereplicationanddeduplicationtableengine)createtabledefault.bi_inner_log_localONCLUSTERclickhouse_cluster(log_uuidString,date_partitionUInt32,event_nameString,activity_nameString,credits_bringInt16,activity_typeString,activity_idUInt16)ENGINE=ReplicatedReplacingMergeTree('/clickhouse/tables/default/bi_inner_log_local/{shard}','{replica}')PARTITIONBYdate_partitionORDERBY(event_name,date_partition,log_ing1uid)ex2;解决方法:配置不同分片在不同的clickhouse节点上,各个节点的分片名称不能一致01example01-01-1问题3:节点数据已经存在于clickhouseCode:253.DB::Exception:Therewasanerroron:代码:253。DB::异常:副本/clickhouse/tables/default/bi_inner_log_local/01/replicas/example01-01-1已经存在。(REPLICA_IS_ALREADY_EXIST)(版本22.5.2.53(官方构建))。(REPLICA_IS_ALREADY_EXIST)(version22.5.2.53(officialbuild))解决办法:进入zookeeper客户端删除相关节点,然后重新创建ReplicatedReplacingMergeTree表。这确保了每个clickhouse节点都将使用来自kafka分区的数据。3)clickhouse创建簇表,创建分布式表(根据log_uuid分布数据,相同的log_uuid会发送到同一个shard,用于后续合并时的数据去重):CREATETABLEdefault.bi_inner_log_allONCLUSTERclickhouse_clusterASdefault。bi_inner_log_localENGINE=分布式(clickhouse_cluster,默认,bi_inner_log_local,xxHash32(log_uuid));问题四:分布式簇表无法查询代码:516.DB::Exception:Receivedfrom10.74.244.57:9000。DB::Exception:default:身份验证失败:密码不正确或没有具有此类名称的用户。(AUTHENTICATION_FAILED)(version22.5.2.53(officialbuild))解决方法:trueip19000defaultxxxxtrueip29000defaultxxxx4)clickhouse创建物化view创建物化视图,将Kafka消费表消费的数据同步到ClickHouse分布式表CREATEMATERIALIZEDVIEWdefault.view_bi_inner_logONCLUSTERclickhouse_clusterTOdefault.bi_inner_log_allASSELECTlog_uuid,date_partition,event_name,activity_name,credits_bring,activity_type,activity_idFROMdefault.kafka_clickhouse_inner_log解决以上所有问题;数据流过!本文所有组件都是比较新的版本,所以过程中的问题解决方法基本都是按照官方文档或者操作手册一步步解决的。总结一句话:遇到问题就去官方文档或者--help去尝试解决,你就会逐渐提高。