欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 宝鼎售后问题提交 | 后台管理


新闻资讯

MENU

软件开发知识

需要对JSON数据进行 图纸加密 解码才能拿到时间戳

点击: 次  来源:宝鼎软件 时间:2017-06-19

原文出处: 朱小厮

概述

Kafka端到端审计是指出产者出产的动静存入至broker,以及消费者从broker中消费动静这个进程之间动静个数及延迟的审计,以此可以检测是否有数据丢失,是否有数据反复以及端到端的延迟等。

今朝主要调研了3个产物:

  1. Chaperone (Uber)
  2. Confluent Control Center(非开源,收费)
  3. Kafka Monitor (LinkedIn)

对付Kafka端到端的审计主要通过:

  1. 动静payload中内嵌时间戳timestamp
  2. 动静payload中内嵌全局index
  3. 动静payload中内嵌timestamp和index

内嵌timestamp的方法

主要是通过配置一个审计的时距离断(这里称之为time_bucket_interval,可以配置几秒可能几分钟,这个可以自界说), 每个timestamp城市被分派到相应的桶中,算法有:

  1. timestamp – timestamp%time_bucket_interval
  2. floor((timestamp /15)*15)

这样可以得到相应time_bucket的起始时间time_bucket_start,一个time_bucket的区间可以记录为[time_bucket_start, time_bucket_start+time_bucket_interval]。

每发送可能消费一条动静可以按照动静payload内嵌的时间戳,分派到相应桶中,然后对桶举办计数,之后举办存储,简朴的可以存储到,好比:Map<long time_bucket_start, long count>之中。

内嵌index的方法

这种方法就更容易领略了,对付每条动静都分派一个全局独一的index,图纸加密,假如topic及相应的partition牢靠的话,可觉得每一个topic-partition配置一个全局的index,当有动静发送到某个topic-partition中,那么首先获取其topic-partition对应的index, 然后内嵌到payload中,之后再发送到broker。消费者举办消费审计,可以判定出哪个动静丢失,哪个动静反复等等。假如要计较端到端延迟的话,还需要在payload中内嵌timestamp以作相应的计较。

下面来扼要阐明下三个产物。

Chaperone

github地点:https://github.com/uber/chaperone
官方先容(中文):http://www.infoq.com/cn/news/2016/12/Uber-Chaperone-Kafka
官方先容(英文):https://eng.uber.com/chaperone/

Chaperone进动作静端到端的校验主要是基于message内置timestamp实现的,按照timestamp将message分派到差异的bucket中。之后就是对这个bucket中的动静举办计数等一系列的audit操纵,然后将这个audit操纵之后的信息auditMessage生存起来,auditMessage的内容:

  • topicName:被audit的topic
  • time_bucket_start:bucket的起始时间
  • time_bucket_end
  • metrics_count:time_bucket中的个数
  • metrics_mean_latency, metrics_p95_latency, metrics_p99_latency,metrics_max_latency:延迟
  • tier
  • hostname
  • datacenter
  • uuid
  • 留意这里的latency的计较法则是:currentTimeMillis – (timestamp*1000)。

    Chaperone的架构

    需要对JSON数据举办 图纸加密 解码才气拿到时间戳

    Chaperone的整体架构分为:AuditLibrary, ChaperoneService, ChaperoneCollector和WebService, 它们会收集数据,并举办相关计较,自动检测出丢失和延迟的数据,劳务派遣管理系统,并展示审计功效。

    从Chaperone的github上的源码来看:
    Chaperone分为ChaperoneClient, ChaperoneCollector, ChaperoneDistribution, ChaperoneServiceController, ChaperoneServiceWorker这5个子项目。比拟着上面的架构图来阐明。

    1. ChaperoneClient对应着AuditLibrary,主要是用来audit message的库(library),并不以实际处事运行,可以在Producer可能Consumer客户端中挪用,默认利用10mins的转动时间bucket来不绝地从每个主题收集动静。然后发送到kafka的chaperone-audit这个topic中。官方文档先容说AuditLibrary会被ChaperoneService, ChaperoneCollector和WebService这三个组件所依赖,但代码中来看并非完全如此,略有进出。

    2. ChaperoneDistribution可以忽略

    3. ChaperoneServiceController和ChaperoneServiceWorker对应架构图中的ChaperoneService,ChaperoneServiceController主要用来检测topics并分派topic-partitions给ChaperoneServiceWorker用以审计(audit)。ChaperoneServiceWorker主要是audit message的一个处事。

  • ChaperoneServiceWorker回收scala语言编写,内部又将ChaperoneClient可能说AuditLibrary又从头用Scala实现了一番,并富厚了一下应用,好比回收hsqldb存储数据,zk存取offsets来实现WAL(预写式日志,详细可见下段先容)
  • Chaperone认为message中内嵌timestamp是十分必需的,可是从ChaperoneServiceWorker的代码来看动静没有timestamp也能运行,当动静没有时间戳,那么会记录noTimeMsgCount,Chaperone先容会有一个牛逼的算法来阐明动静中的timestamp(其实就是读打动静的开头部门,而不是全部整条动静,雷同报文截断理会,下面也有涉及先容),假如理会timestamp失败,会记录malformedMsgCount。
  • 4. ChaperoneCollector对是用来读取audit的数据,然后耐久化操纵,默认存入mysql中,看代码也可选存入redis中。

    5. 源码中没有WebService这个对象,预计是uber内部的web系统,读取下mysql中的内容展示到页面罢了。