点击箭头处“蓝色字”,关注我们哦!!
那把锁
锁用于多线程安全场景下,在Flink中存在一把锁,被用于数据处理线程、定时器调用线程、checkpoint线程。在StreamTask中定义了一个Object对象lock,通过使用synchronized方式进行同步,在task的初始化过程中该对象传给了SystemProcessingTimeService、StreamInputProcessor、StreamTwoInputProcessor。
数据处理线程
这里所说的数据处理线程表示正常的数据处理流程,可以认为就是processElement处理过程,StreamInputProcessor/StreamTwoInputProcessor主要工作就是读取数据然后调用对应的operator处理读取到的数据也就是调用processElement方法:
StreamRecord<IN> record = recordOrMark.asRecord();
synchronized (lock) {
numRecordsIn.inc();
streamOperator.setKeyContextElement1(record);
streamOperator.processElement(record);
}
通过源码可以发现每次调用process