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

一、背景
saas服务未来会面临数据安全、合规等问题 。 公司的业务需要沉淀一套私有化部署能力 , 帮助业务提升行业竞争力 。
为了完善平台系统能力、我们需要沉淀一套数据体系帮助运营分析活动效果、提升运营能力 。
然而在实际的开发过程中 , 如果直接部署一套大数据体系 , 对于使用者来说将是一笔比较大的服务器开销 。 为此我们选用折中方案完善数据分析能力 。
二、ElasticsearchvsClickHouse
ClickHouse是一款高性能列式分布式数据库管理系统 , 我们对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查询效率更高的原因之一 。
替代ELK:ClickHouse+Kafka+FileBeat才是最绝的
文章图片
另一方面ClickHouse比ES占用更少的内存 , 消耗更少的CPU资源 。 我们预估用ClickHouse处理日志可以将服务器成本降低一半 。
替代ELK:ClickHouse+Kafka+FileBeat才是最绝的
文章图片
三、成本分析
在没有任何折扣的情况下 , 基于aliyun分析 。
替代ELK:ClickHouse+Kafka+FileBeat才是最绝的
文章图片
四、环境部署
1、zookeeper集群部署
替代ELK:ClickHouse+Kafka+FileBeat才是最绝的
文章图片
yuminstalljava-1.8.0-openjdk-devel.x86_64
/etc/profile配置环境变量
更新系统时间
yuminstallntpdate
ntpdateasia.pool.ntp.org
mkdirzookeeper
mkdir./zookeeper/data
mkdir./zookeeper/logs
wget--no-check-certificatehttps://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz
tar-zvxfapache-zookeeper-3.7.1-bin.tar.gz-C/usr/zookeeper
exportZOOKEEPER_HOME=/usr/zookeeper/apache-zookeeper-3.7.1-bin
exportPATH=$ZOOKEEPER_HOME/bin:$PATH
进入ZooKeeper配置目录
cd$ZOOKEEPER_HOME/conf
新建配置文件
vizoo.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
在每台服务器上执行 , 给zookeeper创建myid
echo"1">/usr/zookeeper/data/myid
echo"2">/usr/zookeeper/data/myid
echo"3">/usr/zookeeper/data/myid
进入ZooKeeperbin目录
cd$ZOOKEEPER_HOME/bin
shzkServer.shstart
2、Kafka集群部署
mkdir-p/usr/kafka
chmod777-R/usr/kafka
wget--no-check-certificatehttps://mirrors.tuna.tsinghua.edu.cn/apache/kafka/3.2.0/kafka_2.12-3.2.0.tgz
tar-zvxfkafka_2.12-3.2.0.tgz-C/usr/kafka
不同的brokerId设置不一样 , 比如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