DataCarrier作为一款轻量级的基础库,代码结果相当简单,如果通读一下代码,30-40分钟应该就能完成明确用途,这里为了方便大家更容易使用,简要介绍一下DataCarrier类库结果和使用方法。
官方的使用文档,使用英文发布在项目主页上(https://github.com/wu-sheng/DataCarrier),大家可以直接查看,并提供了相关的实例。本篇文章主要介绍各参数的含义,底层模型,以及如何使用。
一. DataCarrier的核心原理
DataCarrier使用多个定长的内存数组。每个定长数组内部使用循环覆盖写入模式,在每个数组内部使用一个基于乐观锁的循环自增索引,处理写入位置,能保证写入的唯一性。在写入层面上,数据是有序循环写入的(如果策略允许不阻塞的话)。
我们利用下图能够明确说明DataCarrier两个关键参数channelSize和bufferSize
channelSize的大小,控制的通道数量,在合理的分区选择函数的基础上,不会出现竞争。
bufferSize为每一个channelSize的大小,可以控制循环写入和批量消费。
对kafka有一定了解的同学,对这两个参数的模式一定不陌生。适当的调配这两个参数,对于提高消费效率,是十分重要的。
二. 分区选择器,Partitioner
分区函数的概念同样类似kafka,当出现并行写入数据的时候,由分区函数来确认,将数据写入哪个分区,借分区函数,来有效降低并发串行写入压力,可以大幅提高效率,降低锁竞争。
DataCarrier在1.0版本中提供了两个分区选择器
1. ProducerThreadPartitioner<T>,根据线程id进行选择,由产生数据的写成id决定,相同的线程号,一定写入同一个分区中。
2. SimpleRollingPartitioner <T>,简单循环自增选择器,使用无锁整形的自增,顺序选择线程号,在高负载时,会产生批量连续写入一个分区的效果,在中等负载情况下,提供较好性能。
分区器只需要实现一个简单的分区函数
int partition(int total, T data)分区返回 [0, total)间的值,用于寻址分析。建议使用简单逻辑,实现快速的分区操作。
三. 缓冲池策略
根据缓冲池循环队列模型,数据时持续循环写入的,DataCarrier针对写满而没有来得及消费时,提供了三种默认策略。
1. BLOCKING(默认),写入线程阻塞等待,直到数据被消费为止
2. OVERRIDE,复写旧数据,旧数据被丢弃
3. IF_POSSIBLE,如果无法写入则直接返回false,由应用程序判断如何处理
缓冲池策略,对于针对不同场景,数据的高效处理,有显著意义。
四. 消费者
DataCarrier支持配置多个消费者实例,利用多线程进行并行消费。
public DataCarrier consume(IConsumer<T> prototype, int num, boolean usePrototypeCopies)
相关推荐
apache-skywalking-java-agent-8.9.0 主要监控 jvm 服务
skywalking的如下版本apache-skywalking-apm-bin-es7.rar skywalking的如下版本apache-skywalking-apm-bin-es7.rar skywalking的如下版本apache-skywalking-apm-bin-es7.rar skywalking的如下版本apache-skywalking-...
apache-skywalking-apm-es7-8.5.0.tar.gz
apache-skywalking-apm-es7-8.7.0.tar.gz
SkyWalking适用于分布式系统的应用程序性能监控工具,专为微服务、云原生和基于容器 (Kubernetes) 的架构而设计。 SkyWalking在8.8.0版本以后将agent进行了单独拆分,因此...apache-skywalking-java-agent-8.15.0.tgz
apache skywalking apm apache-skywalking-apm-8.5.0.tar.gz apache-skywalking-apm 8.5.0
apache-skywalking-java-agent-8.8.0.tgz apache-skywalking-java-agent-8.9.0.tgz apache-skywalking-java-agent-8.10.0.tgz apache-skywalking-java-agent-8.11.0.tgz apache-skywalking-java-agent-8.12.0.tgz ...
apache-skywalking-apm-incubating-6.0.0-beta.tar.gz
最新版 apache-skywalking-apm-es7-8.2.0.tar.gz
apache-skywalking-apm-6.6.0.tar可以监控全链路的工具,端口是8080,可以用来做监控
skywalking es7 tar包。 apache-skywalking-apm-es7-8.0.1.tar
skywalking安装包 skywalking-es7-8.7.0
apache-skywalking-apm-bin-es7.zip
SkyWalking ,它是一款优秀的国产 APM 工具,包括了分布式追踪、性能指标分析、应用和服务依赖分析等。
apache-skywalking-apm-bin-es7-8.3.0-upload.zip
apache-skywalking-apm-bin.rar
apache-skywalking-java-agent-8.13.0 apache-skywalking-apm-9.0.0 目前市面上开源的APM系统主要有CAT、Zipkin、Pinpoint、SkyWalking,大都是参考Google的Dapper实现的. Skywalking是本土开源的基于字节码注入的...
skywalking-agent-java-8.3.0
skywalking-client-js运行时库位于 。 npm install skywalking-client-js --save 快速开始 skywalking-client-js需要SkyWalking 8.2+ 用户可以使用register方法自动加载和报告数据。 import ClientMonitor from '...
elasticsearch-7.11.1与apache-skywalking-apm-es7-8.4.0安装包