一、背景
为了更好的对埋点数据进行可视化分析,项目组决定开发一套自己的监控系统
二、技术选择
Kafka or mq?
Kafka是LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache定级项目。Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输。0.8版本开始支持复制,不支持事务,对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。
RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。
各自的优劣势很明显,其中Kafka的吞吐量远远大于RabbitMQ,但是没有事务。
由于线上埋点数据量很大,并且我们对于监控数据的精确性没有非常严格的要求,所以毫无疑问,Kafka是该项目的首选。(另外大数据方提供的埋点数据就是存储在Kafka的,我们还能用其他的吗 哈哈 )
Mysql or Elasticsearch?
分析一下我们的业务场景:
- 对于埋点数据来说,有太多太多的格式,并且随时可能水平扩展。不适合关系型数据库
- 无事务要求
- 海量数据,并且需要对多字段模糊查询
很明显,这种场景下用mysql简直是自寻死路,elasticsearch可以当做nosql使用,并且如果有特定的查询需求还可以使用es的分词插件。
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.
其中Kibana 是和Es配套的(ELK),由于项目组采用的都是Grafana,所以这里我并没有对比两者优劣。不过对于喜欢科技风格的我来说,Grafana还是大爱啊!
三、架构图