替代ELK:ClickHouse+Kafka+FlieBeat才是最绝的

来源:juejin.cn/post/7120880190003085320
背景
elasticsearch 与 clickhouse
成本分析
环境部署
总结
背景
saas业务业务未来需要业务管理、业务管理等业务能力。
为了平台系统能力、我们需要完善数据集来帮助运营分析活动效果、提升运营能力。
如果在实际过程中直接部署系统,对于用户来说,将是一个巨大的数据比较能力的服务器。我们在开发中使用折中方案完善数据分析。
elasticsearch 与 clickhouse
clickhouse是一款系统列式对数据库管理的测试,我们使用clickhouse进行了以下优势:
①clickhouse 输入商品大
单服务器记录写入量在 50mb 到 50mb/秒,记录写入超过 60w 个数,是 es 的 5 倍以上。
在 es 中比较常见的写 rejected 导致数据丢失、写入延迟等问题,在 clickhouse 中不容易发生。
②查询速度快
网页缓存中的快速数据,在页面缓存中的快速查询单 2-30gb/查询速度;没有在的情况下,查询查询结果的查询速度和数据查询速度比 es clickhouse 5-30倍以上。
③点击费用比es费用多少
click house 的 es 高,同样数据占用的计算机空间比 es 的 1/0 使用 1/03 次,可以节省空间的同时,也能有效地减少碳 io,这也是 click 查询效率更高的原因之一。
点击使用house的内存资源,可以比用cpu的资源。
成本分析
备注:在没有任何折扣的情况下,基于阿里云分析。
环境部署
动物园管理员聚集部署
yum install java-1.8.0-openjdk-devel.x86_64/etc/profile 配置环境变量更新系统时间yum install  ntpdatentpdate asia.pool.ntp.orgmkdir zookeepermkdir ./zookeeper/datamkdir ./zookeeper/logswget  --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gztar -zvxf apache-zookeeper-3.7.1-bin.tar.gz -c /usr/zookeeperexport zookeeper_home=/usr/zookeeper/apache-zookeeper-3.7.1-binexport path=$zookeeper_home/bin:$path进入zookeeper配置目录cd $zookeeper_home/conf新建配置文件vi zoo.cfgticktime=2000initlimit=10synclimit=5datadir=/usr/zookeeper/datadatalogdir=/usr/zookeeper/logsclientport=2181server.1=zk1:2888:3888server.2=zk2:2888:3888server.3=zk3:2888:3888在每台服务器上执行,给zookeeper创建myidecho 1 > /usr/zookeeper/data/myidecho 2 > /usr/zookeeper/data/myidecho 3 > /usr/zookeeper/data/myid进入zookeeper bin目录cd $zookeeper_home/binsh zkserver.sh start  
卡夫卡基地部署
mkdir -p /usr/kafkachmod 777 -r /usr/kafkawget  --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/3.2.0/kafka_2.12-3.2.0.tgztar -zvxf kafka_2.12-3.2.0.tgz -c /usr/kafka不同的broker id 设置不一样,比如 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-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-elasticsearchcreate 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/ 目录下创建elastic.repo[elastic-8.x]name=elastic repository for 8.x packagesbaseurl=https://artifacts.elastic.co/packages/8.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/gpg-key-elasticsearchenabled=1autorefresh=1type=rpm-mdyum install filebeatsystemctl enable filebeatchkconfig --add filebeat  
filebeat配置文件说明,坑点1(需设置keys_under_root: true)。如果不设置kafka的消息字段如下:
文件目录: /etc/filebeat/filebeat.ymlfilebeat.inputs:- type: log  enabled: true  paths:    - /root/logs/xxx/inner/*.log  json:  如果不设置该索性,所有的数据都存储在message里面,这样设置以后数据会平铺。       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: gzipprocessors: 剔除filebeat 无效的字段数据    - drop_fields:          fields: [input, agent, ecs, log, metadata, timestamp]        ignore_missing: falsenohup ./filebeat -e -c /etc/filebeat/filebeat.yml > /user/filebeat/filebeat.log & 输出到filebeat.log文件中,方便排查  
clickhouse 部署
检查当前cpu是否支持sse 4.2,如果不支持,需要通过源代码编译构建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 表示不支持创建数据保存目录,将它创建到大容量磁盘挂载的路径mkdir -p /data/clickhouse修改/etc/hosts文件,添加clickhouse节点举例:10.190.85.92 bigdata-clickhouse-0110.190.85.93 bigdata-clickhouse-02服务器性能参数设置:cpu频率调节,将cpu频率固定工作在其支持的最高运行频率上,而不动态调节,性能最好echo 'performance' | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor内存调节,不要禁用 overcommitecho 0 | tee /proc/sys/vm/overcommit_memory始终禁用透明大页(transparent huge pages)。 它会干扰内存分配器,从而导致显着的性能下降echo 'never' | tee /sys/kernel/mm/transparent_hugepage/enabled首先,需要添加官方存储库:yum install yum-utilsrpm --import yum-config-manager --add-repo 查看clickhouse可安装的版本:yum list | grep clickhouse运行安装命令:yum -y install clickhouse-server clickhouse-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 --passwordsudo clickhouse stopsudo clickhouse tartsudo clickhouse start  
clickhouse 部署过程中遇到的一些问题如下:
①点击house创建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 = '',    kafka_num_consumers = 1;  
1:clikhouse 客户端问题无法查询 kafka 引擎
不允许直接选择。要启用使用设置 stream_like_engine_allow_direct_select.(query_not_allowed)(版本 22.5.2.53(官方构建))
解决方案:
需要在clickhouse client 创建加上 --stream_like_engine_allow_direct_select 1 clickhouse-client --stream_like_engine_allow_direct_select 1 --password xxxxx  
②点击房屋创建本地节点表
2:无法开启本地表宏
代码: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(官方版本))。(syntax_error) (版本 22.5.2.53 (正式版))
创建本地表(使用复制去重表引擎)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节点上配置不同的分片,每个节点的分片名称不能一致。
01        example01-01-1      
3:clickhouse中节点数据已经存在
代码:253。db::exception:出现错误:代码:253。db::exception:副本/clickhouse/tables/default/bi_inner_log_local/01/replicas/example01-01-1 已存在。(replica_is_already_exist)(版本 22.5.2.53(官方版本))。(replica_is_already_exist)(版本 22.5.2.53(官方构建))
解决方案:进入zookeeper客户端删除相关节点,然后再重新创建replicatedreplaceingmergetree表。这样可以保障每一个clickhouse节点去消费kafka分区的数据。
③点击房屋创建聚会表
日志(根据日志_uuid 分发给数据,相同的日志_uuid 会发送到同一时间的数据分片上重发):
create table default.bi_inner_log_all on cluster clickhouse_cluster as default.bi_inner_log_localengine = distributed(clickhouse_cluster, default, bi_inner_log_local, xxhash32(log_uuid));  
4:自动查询表无法查询
代码:516。db::exception:从 10.74.244.57:9000 接收。db::exception:默认值:身份验证失败:密码不正确或没有该名称的用户。(authentication_failed) (版本 22.5.2.53 (正式版))
解决方案:
true                                                    ip1                            9000                                    default                                    xxxx                                                                                        true                                                    ip2                            9000                                    default                                    xxxx                                                                      
④点击房屋创建物化视图
创建物化物,把查看 kafka 消费表消费的同步 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;  
小结:不负有心人,解决完以上所有的问题。数据流转通了!这里所有组件都是功夫文档比较新的版本,所以过程中问题的解决基本都是官方或操作手册一步一步的解决。
总结一句话:问题遇到去解决或--帮助去解决,慢慢的你的官方升华。
总结
整个部署的过程中有一个坑,特别是filebeat yml的参数设置和clickhouse的配置说明。
很久没有更新了,经常看到博客35岁以后办的问题。说实话我自己也不会好以后怎么办,核心还是持续的&输出。不断的博客制造了自己的护城河,不管是技术专家、业务专家、架构、管理等。
个人建议如果能经常写代码就奋战一线,管理彻底与公司绑定。
如果所在行业的公司还是已经选择了整体的商业影响力,个人觉得可以奋战在一线,未来的工作。考量更多的影响力、感觉、技术架构。现在的我 35,从容的面对一天。

嵌入式AI的概念 嵌入式和人工智能的关系
基于单腔双波长激光器的中红外双光梳系统介绍
YAZAKI对电动汽车未来需求的设计
国家地理杂志使用大疆无人机首次拍摄珠峰全景照片
L-com诺通推出新型超六类双屏蔽高柔性拖链级以太网线缆
替代ELK:ClickHouse+Kafka+FlieBeat才是最绝的
如何通过USB到TTL转换器进入HC05/HC-06蓝牙模块的AT命令模式
激光雷达(LiDAR)技术借此夯实了其在汽车自动化的地位
传感器制造产业的发展将受益于物联网的爆发
电源模块的作用,如何选择合适的电源模块
东风无人驾驶新突破 运营超70万公里 接驳人数超15万人次
电力系统三道防线的基本原理 电力系统运行的基本要求
华为p11什么时候上市?华为p11最新消息:全面屏+八曲面,华为P11惊艳四方
探究当前相关企业正在如何提升中国集成电路产业实力
介绍单个数据项的写入事务的过程
详细解读Linux内核的poll机制
HoloSens:华为机器视觉的“王炸”
iphone13预定后多久发货,iphone13预定期间可以以旧换新吗
IDC预测未来5年机械硬盘仍呈高速增长 SSD价格短期上扬
大学生利用3D打印机为医务人员打印口罩