天天看点

使用Kafka、Elasticsearch、Grafana搭建业务监控系统(一)技术选择

系列目录

使用Kafka、Elasticsearch、Grafana搭建业务监控系统(一)技术选择

使用Kafka、Elasticsearch、Grafana搭建业务监控系统(二)Kafka

使用Kafka、Elasticsearch、Grafana搭建业务监控系统(三)Elasticsearch

使用Kafka、Elasticsearch、Grafana搭建业务监控系统(四)Grafana(填坑ing)

一、背景

为了更好的对埋点数据进行可视化分析,项目组决定开发一套自己的监控系统

二、技术选择

  1. Kafka or mq?
Kafka是LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache定级项目。Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输。0.8版本开始支持复制,不支持事务,对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。
RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。

各自的优劣势很明显,其中Kafka的吞吐量远远大于RabbitMQ,但是没有事务。

由于线上埋点数据量很大,并且我们对于监控数据的精确性没有非常严格的要求,所以毫无疑问,Kafka是该项目的首选。(另外大数据方提供的埋点数据就是存储在Kafka的,我们还能用其他的吗 哈哈 )

  1. Mysql or Elasticsearch?

    分析一下我们的业务场景:

    - 对于埋点数据来说,有太多太多的格式,并且随时可能水平扩展。不适合关系型数据库

    - 无事务要求

    - 海量数据,并且需要对多字段模糊查询

很明显,这种场景下用mysql简直是自寻死路,elasticsearch可以当做nosql使用,并且如果有特定的查询需求还可以使用es的分词插件。

  1. Kibana or Grafana?
Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作。您可以使用 Kibana 对 Elasticsearch 索引中的数据进行搜索、查看、交互操作。您可以很方便的利用图表、表格及地图对数据进行多元化的分析和呈现。
Grafana allows you to query, visualize, alert on and understand your metrics no matter where they are stored. Create, explore, and share dashboards with your team and foster a data driven culture.
使用Kafka、Elasticsearch、Grafana搭建业务监控系统(一)技术选择
使用Kafka、Elasticsearch、Grafana搭建业务监控系统(一)技术选择

其中Kibana 是和Es配套的(ELK),由于项目组采用的都是Grafana,所以这里我并没有对比两者优劣。不过对于喜欢科技风格的我来说,Grafana还是大爱啊!

三、架构图

技术框架选择好后就是搭建项目了,java项目由spring-kafka监听(多线程),spring-es写入,中间穿插spring定时任务(创建索引、删除索引),具体见下图:

使用Kafka、Elasticsearch、Grafana搭建业务监控系统(一)技术选择

四、结语

业务监控的技术选择就介绍到这里,下面将介绍第一步:生产/消费Kafka数据

使用Kafka、Elasticsearch、Grafana搭建业务监控系统(二)Kafka

继续阅读