druid kafka摄取任务预聚合逻辑源码追踪

1.梳理druid预聚合逻辑
摄取预聚合主逻辑:
KafkaRecordSupplier.poll() -->   IncrementalPublishingKafkaIndexTaskRunner.getRecords() --> SeekableStreamIndexTaskRunner.getRecords()
--> StreamAppenderatorDriver.add(record) --> BaseAppenderatorDriver.append() --> AppenderatorImpl.add()  --> Sink.add() --> IncrementalIndex.add()
(实现类:OnheapIncrementalIndex,OffHeap...,Map...) addToFacts() --> factorizeAggs(),doAggregate()
 


列值选择逻辑IncrementalIndex.makeColumnSelectorFactory():
final RowBasedColumnSelectorFactory baseSelectorFactory = RowBasedColumnSelectorFactory.create(in::get, null);
final ColumnValueSelector selector = baseSelectorFactory.makeColumnValueSelector(column);


IncrementalIndex
sortFacts:true时才有maxTime,minTime
维度数据结构逻辑参考:
核心分组逻辑方法:IncrementalIndex.toIncrementalIndexRow()
维度字典:dimsDictionary

维度、指标,聚合关联结构:
dims--rowIndex--agg  metric--selector


IncrementalIndexRow: 截断timestamp,dims值
聚合后逻辑:
Sink:
canAppendRow()---->index.canAppendRow()   maxRowCount,maxBytesInMemory --persist=true/false
FireHydrant:IncrementalIndex

AppenderatorImpl:
add()--->persist=true时,persistAll()-->persistExecutor.submit(): persistHydrant(FireHydrant)  ---> IndexMerger.persist(Index)(实现类 IndexMergerV9) ---> merge(new IncrementalIndexAdapter(index),metricAggs,outDir)


druid采集任务字段解析
SeekableStreamIndexTaskRunner.parseWithInputFormat()  --->InputEntityReader(实现类JsonReader,Orc,...)  JsonReader.parseInputRows()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值