Flink-1.5.0-源码分析系列10:接收任务

下面我们看TM是如何接收任务并处理的!

jdb -sourcepath /root/kafka-clients-0.10.2.1-sources:/root/flink-1.5.0-src/flink-connectors/flink-connector-kafka-0.10/src/main/java:/root/flink-1.5.0-src/flink-connectors/flink-connector-kafka-0.9/src/main/java:/root/flink-1.5.0-src/flink-connectors/flink-connector-kafka-base/src/main/java:/root/flink-1.5.0-src/flink-runtime/src/main/java:/root/flink-release-1.5.0/flink-release-1.5.0/flink-connectors/flink-connector-kafka-base:/root/flink-release-1.5.0/flink-release-1.5.0/flink-core/src/main/java:/root/flink-release-1.5.0/flink-release-1.5.0/flink-streaming-java/src/main/java:/root/flink-release-1.5.0/flink-connectors/flink-connector-kafka-0.10/src/main/java:/root/flink-release-1.5.0/flink-connectors/flink-connector-kafka-base/src/main/java:/root/flink-release-1.5.0/flink-streaming-java/src/main/java:/root/yarn_study/hadoop-2.2.0-src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ct/src/main/java:/root/yarn_study/hadoop-2.2.0-src/hadoop-common-project/hadoop-common/src/main/java:/root/yarn_study/hadoop-2.2.0-src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java:/root/yarn_study/hadoop-2.2.0-src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java:/root/flink-release-1.5.0/flink-runtime-web/src/main/java:/root/flink-release-1.5.0/flink-core/src/main/java:/root/yarn_study/hadoop-2.2.0-src/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java:/root/flink-release-1.5.0/flink-yarn/src/main/java:/root/flink-release-1.5.0/flink-runtime/src/main/java -attach localhost:10000

会看到

eaee684e474d0dd690ea97db9d5b5edeea7.jpg

这里的调用栈就是

 [1] org.apache.flink.runtime.deployment.TaskDeploymentDescriptor.getTargetSlotNumber (TaskDeploymentDescriptor.java:256)
  [2] org.apache.flink.runtime.taskmanager.TaskManager.submitTask (TaskManager.scala:1,141)
  [3] org.apache.flink.runtime.taskmanager.TaskManager.org$apache$flink$runtime$taskmanager$TaskManager$$handleTaskMessage (TaskManager.scala:457)
  [4] org.apache.flink.runtime.taskmanager.TaskManager$$anonfun$handleMessage$1.applyOrElse (TaskManager.scala:279)
  [5] scala.runtime.AbstractPartialFunction.apply (AbstractPartialFunction.scala:36)
  [6] org.apache.flink.runtime.LeaderSessionMessageFilter$$anonfun$receive$1.applyOrElse (LeaderSessionMessageFilter.scala:38)
  [7] scala.runtime.AbstractPartialFunction.apply (AbstractPartialFunction.scala:36)
  [8] org.apache.flink.runtime.LogMessages$$anon$1.apply (LogMessages.scala:33)
  [9] org.apache.flink.runtime.LogMessages$$anon$1.apply (LogMessages.scala:28)
  [10] scala.PartialFunction$class.applyOrElse (PartialFunction.scala:123)
  [11] org.apache.flink.runtime.LogMessages$$anon$1.applyOrElse (LogMessages.scala:28)
  [12] akka.actor.Actor$class.aroundReceive (Actor.scala:502)
  [13] org.apache.flink.runtime.taskmanager.TaskManager.aroundReceive (TaskManager.scala:122)
  [14] akka.actor.ActorCell.receiveMessage (ActorCell.scala:526)
  [15] akka.actor.ActorCell.invoke (ActorCell.scala:495)
  [16] akka.dispatch.Mailbox.processMailbox (Mailbox.scala:257)
  [17] akka.dispatch.Mailbox.run (Mailbox.scala:224)
  [18] akka.dispatch.Mailbox.exec (Mailbox.scala:234)
  [19] scala.concurrent.forkjoin.ForkJoinTask.doExec (ForkJoinTask.java:260)
  [20] scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask (ForkJoinPool.java:1,339)
  [21] scala.concurrent.forkjoin.ForkJoinPool.runWorker (ForkJoinPool.java:1,979)
  [22] scala.concurrent.forkjoin.ForkJoinWorkerThread.run (ForkJoinWorkerThread.java:107)

所以就是在这里接收任务的,

 

 

 

我们打上断点

stop in org.apache.flink.runtime.deployment.TaskDeploymentDescriptor.getTargetSlotNumber

stop in org.apache.flink.runtime.taskmanager.Task.run

stop at org.apache.flink.runtime.taskmanager.Task:691

stop in org.apache.flink.streaming.runtime.tasks.StreamTask.invoke

stop at org.apache.flink.streaming.runtime.tasks.StreamTask:261

stop in org.apache.flink.streaming.runtime.tasks.StreamTask.openAllOperators

stop in org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase.open

stop at org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer010:220

stop at org.apache.flink.streaming.connectors.kafka.internal.Kafka09PartitionDiscoverer:58

stop at org.apache.kafka.clients.consumer.KafkaConsumer:621

stop at org.apache.flink.streaming.connectors.kafka.internal.Kafka09Fetcher:154

stop in org.apache.flink.streaming.connectors.kafka.internal.Kafka010Fetcher.emitRecord

stop at org.apache.flink.streaming.runtime.tasks.OperatorChain:555

stop in org.apache.flink.table.runtime.CRowOutputProcessRunner.processElement

stop at org.apache.flink.streaming.api.operators.ProcessOperator:66

stop at org.apache.flink.streaming.runtime.partitioner.KeyGroupStreamPartitioner:43
stop at org.apache.flink.streaming.runtime.partitioner.KeyGroupStreamPartitioner:59

stop at org.apache.flink.runtime.io.network.api.writer.RecordWriter:148

 

注意:真实取数据是通过KafkaConsumerThread来的,中转,然后Kafka09Fetcher.runFetchLoop会从这个中转拿到数据!

这个通过下面的调用栈可见一斑

  [1] org.apache.flink.streaming.runtime.streamrecord.StreamRecord.getValue (StreamRecord.java:67)
  [2] org.apache.flink.streaming.api.operators.ProcessOperator.processElement (ProcessOperator.java:66)
  [3] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.pushToOperator (OperatorChain.java:560)
  [4] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:535)
  [5] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:515)
  [6] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:679)
  [7] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:657)
  [8] org.apache.flink.streaming.api.operators.StreamSourceContexts$ManualWatermarkContext.processAndCollectWithTimestamp (StreamSourceContexts.java:310)
  [9] org.apache.flink.streaming.api.operators.StreamSourceContexts$WatermarkContext.collectWithTimestamp (StreamSourceContexts.java:409)
  [10] org.apache.flink.streaming.connectors.kafka.internals.AbstractFetcher.emitRecordWithTimestamp (AbstractFetcher.java:398)
  [11] org.apache.flink.streaming.connectors.kafka.internal.Kafka010Fetcher.emitRecord (Kafka010Fetcher.java:89)
  [12] org.apache.flink.streaming.connectors.kafka.internal.Kafka09Fetcher.runFetchLoop (Kafka09Fetcher.java:154)
  [13] org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase.run (FlinkKafkaConsumerBase.java:721)
  [14] org.apache.flink.streaming.api.operators.StreamSource.run (StreamSource.java:87)
  [15] org.apache.flink.streaming.api.operators.StreamSource.run (StreamSource.java:56)
  [16] org.apache.flink.streaming.runtime.tasks.SourceStreamTask.run (SourceStreamTask.java:99)
  [17] org.apache.flink.streaming.runtime.tasks.StreamTask.invoke (StreamTask.java:306)
  [18] org.apache.flink.runtime.taskmanager.Task.run (Task.java:703)

然后,郁闷的是,debug一段scala代码后,跟丢了,scala代码真不好,搞什么scala,擦, 

回家想了下,翻回客户端的debug笔记,下一段应该是KeyGroupStreamPartitioner的selectChannels方法

于是打断点

stop at org.apache.flink.streaming.runtime.partitioner.KeyGroupStreamPartitioner:43
stop at org.apache.flink.streaming.runtime.partitioner.KeyGroupStreamPartitioner:59

我们来看看是否可以hit breakpoint,果然可以命中

Source: MyKafka010JsonTableSource -> from: (metric, time, value, nested) -> where: (AND(IS NOT NULL(metric), IS NOT NULL(value))), select: (metric, time, nested.number AS $f2, CAST(value) AS value, value AS value0, PROCTIME(time) AS $f5) (1/4)[1] where
  [1] org.apache.flink.streaming.runtime.partitioner.KeyGroupStreamPartitioner.selectChannels (KeyGroupStreamPartitioner.java:59)
  [2] org.apache.flink.streaming.runtime.partitioner.KeyGroupStreamPartitioner.selectChannels (KeyGroupStreamPartitioner.java:32)
  [3] org.apache.flink.runtime.io.network.api.writer.RecordWriter.emit (RecordWriter.java:104)
  [4] org.apache.flink.streaming.runtime.io.StreamRecordWriter.emit (StreamRecordWriter.java:81)
  [5] org.apache.flink.streaming.runtime.io.RecordWriterOutput.pushToRecordWriter (RecordWriterOutput.java:107)
  [6] org.apache.flink.streaming.runtime.io.RecordWriterOutput.collect (RecordWriterOutput.java:89)
  [7] org.apache.flink.streaming.runtime.io.RecordWriterOutput.collect (RecordWriterOutput.java:45)
  [8] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:679)
  [9] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:657)
  [10] org.apache.flink.streaming.api.operators.TimestampedCollector.collect (TimestampedCollector.java:51)
  [11] org.apache.flink.table.runtime.CRowWrappingCollector.collect (CRowWrappingCollector.scala:37)
  [12] org.apache.flink.table.runtime.CRowWrappingCollector.collect (CRowWrappingCollector.scala:28)
  [13] DataStreamCalcRule$32.processElement (null)
  [14] org.apache.flink.table.runtime.CRowProcessRunner.processElement (CRowProcessRunner.scala:66)
  [15] org.apache.flink.table.runtime.CRowProcessRunner.processElement (CRowProcessRunner.scala:35)
  [16] org.apache.flink.streaming.api.operators.ProcessOperator.processElement (ProcessOperator.java:66)
  [17] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.pushToOperator (OperatorChain.java:560)
  [18] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:535)
  [19] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:515)
  [20] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:679)
  [21] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:657)
  [22] org.apache.flink.streaming.api.operators.TimestampedCollector.collect (TimestampedCollector.java:51)
  [23] org.apache.flink.table.runtime.CRowWrappingCollector.collect (CRowWrappingCollector.scala:37)
  [24] org.apache.flink.table.runtime.CRowWrappingCollector.collect (CRowWrappingCollector.scala:28)
  [25] DataStreamSourceConversion$8.processElement (null)
  [26] org.apache.flink.table.runtime.CRowOutputProcessRunner.processElement (CRowOutputProcessRunner.scala:67)
  [27] org.apache.flink.streaming.api.operators.ProcessOperator.processElement (ProcessOperator.java:66)
  [28] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.pushToOperator (OperatorChain.java:560)
  [29] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:535)
  [30] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:515)
  [31] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:679)
  [32] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:657)
  [33] org.apache.flink.streaming.api.operators.StreamSourceContexts$ManualWatermarkContext.processAndCollectWithTimestamp (StreamSourceContexts.java:310)
  [34] org.apache.flink.streaming.api.operators.StreamSourceContexts$WatermarkContext.collectWithTimestamp (StreamSourceContexts.java:409)
  [35] org.apache.flink.streaming.connectors.kafka.internals.AbstractFetcher.emitRecordWithTimestamp (AbstractFetcher.java:398)
  [36] org.apache.flink.streaming.connectors.kafka.internal.Kafka010Fetcher.emitRecord (Kafka010Fetcher.java:89)
  [37] org.apache.flink.streaming.connectors.kafka.internal.Kafka09Fetcher.runFetchLoop (Kafka09Fetcher.java:154)
  [38] org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase.run (FlinkKafkaConsumerBase.java:721)
  [39] org.apache.flink.streaming.api.operators.StreamSource.run (StreamSource.java:87)
  [40] org.apache.flink.streaming.api.operators.StreamSource.run (StreamSource.java:56)
  [41] org.apache.flink.streaming.runtime.tasks.SourceStreamTask.run (SourceStreamTask.java:99)
  [42] org.apache.flink.streaming.runtime.tasks.StreamTask.invoke (StreamTask.java:306)
  [43] org.apache.flink.runtime.taskmanager.Task.run (Task.java:703)
  [44] java.lang.Thread.run (Thread.java:748)

然后发现一个RecordWriter的一个缓存问题,flush相关,感觉数据不会立刻写,很奇怪,抓到调用栈如下

)[1] where
  [1] org.apache.flink.runtime.io.network.api.writer.RecordWriter.<init> (RecordWriter.java:84)
  [2] org.apache.flink.streaming.runtime.io.StreamRecordWriter.<init> (StreamRecordWriter.java:58)
  [3] org.apache.flink.streaming.runtime.tasks.StreamTask.createStreamRecordWriter (StreamTask.java:1,202)
  [4] org.apache.flink.streaming.runtime.tasks.StreamTask.createStreamRecordWriters (StreamTask.java:1,171)
  [5] org.apache.flink.streaming.runtime.tasks.StreamTask.<init> (StreamTask.java:214)
  [6] org.apache.flink.streaming.runtime.tasks.StreamTask.<init> (StreamTask.java:193)
  [7] org.apache.flink.streaming.runtime.tasks.SourceStreamTask.<init> (SourceStreamTask.java:51)
  [8] sun.reflect.NativeConstructorAccessorImpl.newInstance0 (native method)
  [9] sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62)
  [10] sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45)
  [11] java.lang.reflect.Constructor.newInstance (Constructor.java:423)
  [12] org.apache.flink.runtime.taskmanager.Task.loadAndInstantiateInvokable (Task.java:1,445)
  [13] org.apache.flink.runtime.taskmanager.Task.run (Task.java:680)
  [14] java.lang.Thread.run (Thread.java:748)

然后跟踪到chainConfigs

chainedConfigs = "{1=
=======================Stream Config=======================
Number of non-chained inputs: 0
Number of non-chained outputs: 0
Output names: []
Partitioning:
Chained subtasks: [(Source: MyKafka010JsonTableSource-1 -> from: (metric, time, value, nested)-2, typeNumber=0, selectedNames=[], outputPartitioner=FORWARD, outputTag=null)]
Operator: StreamSource
Buffer timeout: 100
State Monitoring: true


---------------------
Chained task configs
---------------------
{2=
=======================Stream Config=======================
Number of non-chained inputs: 0
Number of non-chained outputs: 0
Output names: []
Partitioning:
Chained subtasks: [(from: (metric, time, value, nested)-2 -> where: (AND(IS NOT NULL(metric), IS NOT NULL(value))), select: (metric, time, nested.number AS $f2, CAST(value) AS value, value AS value0, PROCTIME(time) AS $f5)-3, typeNumber=0, selectedNames=[], outputPartitioner=FORWARD, outputTag=null)]
Operator: ProcessOperator
Buffer timeout: 100
State Monitoring: true, 3=
=======================Stream Config=======================
Number of non-chained inputs: 0
Number of non-chained outputs: 1
Output names: [(where: (AND(IS NOT NULL(metric), IS NOT NULL(value))), select: (metric, time, nested.number AS $f2, CAST(value) AS value, value AS value0, PROCTIME(time) AS $f5)-3 -> groupBy: (metric), window: (TumblingGroupWindow('w$, 'time, 3000.millis)), select: (metric, SUM($f2) AS nestedNumber, SUM(value) AS sum, COUNT(value0) AS count, AVG(value) AS avg, MAX(value) AS max, MIN(value) AS min, MAX($f5) AS time)-5, typeNumber=0, selectedNames=[], outputPartitioner=HASH, outputTag=null)]
Partitioning:
	5: HASH
Chained subtasks: []
Operator: ProcessOperator
Buffer timeout: 100
State Monitoring: true}, 2=
=======================Stream Config=======================
Number of non-chained inputs: 0
Number of non-chained outputs: 0
Output names: []
Partitioning:
Chained subtasks: [(from: (metric, time, value, nested)-2 -> where: (AND(IS NOT NULL(metric), IS NOT NULL(value))), select: (metric, time, nested.number AS $f2, CAST(value) AS value, value AS value0, PROCTIME(time) AS $f5)-3, typeNumber=0, selectedNames=[], outputPartitioner=FORWARD, outputTag=null)]
Operator: ProcessOperator
Buffer timeout: 100
State Monitoring: true, 3=
=======================Stream Config=======================
Number of non-chained inputs: 0
Number of non-chained outputs: 1
Output names: [(where: (AND(IS NOT NULL(metric), IS NOT NULL(value))), select: (metric, time, nested.number AS $f2, CAST(value) AS value, value AS value0, PROCTIME(time) AS $f5)-3 -> groupBy: (metric), window: (TumblingGroupWindow('w$, 'time, 3000.millis)), select: (metric, SUM($f2) AS nestedNumber, SUM(value) AS sum, COUNT(value0) AS count, AVG(value) AS avg, MAX(value) AS max, MIN(value) AS min, MAX($f5) AS time)-5, typeNumber=0, selectedNames=[], outputPartitioner=HASH, outputTag=null)]
Partitioning:
	5: HASH
Chained subtasks: []
Operator: ProcessOperator
Buffer timeout: 100
State Monitoring: true}"
Source: MyKafka010JsonTableSource -> from: (metric, time, value, nested) -> where: (AND(IS NOT NULL(metric), IS NOT NULL(value))), select: (metric, time, nested.number AS $f2, CAST(value) AS value, value AS value0, PROCTIME(time) AS $f5) (1/4)[1] 

断点stop at org.apache.flink.streaming.runtime.tasks.StreamTask:213

看到的是

taskConfiguration = "{checkpointing=true, vertexID=1, outStreamEdges=[B@1938463b, nonChainedOutputs=[B@53b0d4e0, userFunction=org.apache.flink.streaming.api.operators.StreamSource, numberOfOutputs=0, operatorName=Source: MyKafka010JsonTableSource, timechar=2, statekeyser=[B@6879c7d9, serializedUDF=[B@59eea41a, statePartitioner0=[B@23c2882, statePartitioner1=[B@57feebf1, typeSerializer_in_2=[B@719fb9d8, typeSerializer_in_1=[B@5dfd1d85, typeSerializer_out=[B@3e665680, bufferTimeout=100, chainedTaskConfig_=[B@1ee783de, chainIndex=0, chainedOutputs=[B@12bab8a3, edgesInOrder=[B@271e8e44, outputSelectorWrapper=[B@2b400e71, isChainedSubtask=true, checkpointMode=0, operatorID=[B@91b91b4}"
Source: MyKafka010JsonTableSource -> from: (metric, time, value, nested) -> where: (AND(IS NOT NULL(metric), IS NOT NULL(value))), select: (metric, time, nested.number AS $f2, CAST(value) AS value, value AS value0, PROCTIME(time) AS $f5) (3/4)[1] 

这个其实很简单,java代码里设置env就行了!

---继续debug


[1] org.apache.flink.runtime.io.network.netty.PartitionRequestQueue.notifyReaderNonEmpty (PartitionRequestQueue.java:92)
  [2] org.apache.flink.runtime.io.network.netty.CreditBasedSequenceNumberingViewReader.notifyDataAvailable (CreditBasedSequenceNumberingViewReader.java:197)
  [3] org.apache.flink.runtime.io.network.partition.PipelinedSubpartitionView.notifyDataAvailable (PipelinedSubpartitionView.java:56)
  [4] org.apache.flink.runtime.io.network.partition.PipelinedSubpartition.notifyDataAvailable (PipelinedSubpartition.java:290)
  [5] org.apache.flink.runtime.io.network.partition.PipelinedSubpartition.flush (PipelinedSubpartition.java:76)
  [6] org.apache.flink.runtime.io.network.partition.ResultPartition.flush (ResultPartition.java:269)
  [7] org.apache.flink.runtime.io.network.api.writer.RecordWriter.sendToTarget (RecordWriter.java:149)
  [8] org.apache.flink.runtime.io.network.api.writer.RecordWriter.emit (RecordWriter.java:105)
  [9] org.apache.flink.streaming.runtime.io.StreamRecordWriter.emit (StreamRecordWriter.java:81)
  [10] org.apache.flink.streaming.runtime.io.RecordWriterOutput.pushToRecordWriter (RecordWriterOutput.java:107)
  [11] org.apache.flink.streaming.runtime.io.RecordWriterOutput.collect (RecordWriterOutput.java:89)
  [12] org.apache.flink.streaming.runtime.io.RecordWriterOutput.collect (RecordWriterOutput.java:45)
  [13] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:679)
  [14] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:657)
  [15] org.apache.flink.streaming.api.operators.TimestampedCollector.collect (TimestampedCollector.java:51)
  [16] org.apache.flink.table.runtime.RowtimeProcessFunction.processElement (RowtimeProcessFunction.scala:45)
  [17] org.apache.flink.table.runtime.RowtimeProcessFunction.processElement (RowtimeProcessFunction.scala:32)
  [18] org.apache.flink.streaming.api.operators.ProcessOperator.processElement (ProcessOperator.java:66)
  [19] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.pushToOperator (OperatorChain.java:560)
  [20] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:535)
  [21] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:515)
  [22] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:679)
  [23] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:657)
  [24] org.apache.flink.streaming.api.operators.TimestampedCollector.collect (TimestampedCollector.java:51)
  [25] org.apache.flink.table.runtime.CRowWrappingCollector.collect (CRowWrappingCollector.scala:37)
  [26] org.apache.flink.table.runtime.CRowWrappingCollector.collect (CRowWrappingCollector.scala:28)
  [27] DataStreamCalcRule$32.processElement (null)
  [28] org.apache.flink.table.runtime.CRowProcessRunner.processElement (CRowProcessRunner.scala:66)
  [29] org.apache.flink.table.runtime.CRowProcessRunner.processElement (CRowProcessRunner.scala:35)
  [30] org.apache.flink.streaming.api.operators.ProcessOperator.processElement (ProcessOperator.java:66)
  [31] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.pushToOperator (OperatorChain.java:560)
  [32] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:535)
  [33] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:515)
  [34] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:679)
  [35] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:657)
  [36] org.apache.flink.streaming.runtime.operators.TimestampsAndPeriodicWatermarksOperator.processElement (TimestampsAndPeriodicWatermarksOperator.java:67)
  [37] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.pushToOperator (OperatorChain.java:560)
  [38] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:535)
  [39] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:515)
  [40] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:679)
  [41] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:657)
  [42] org.apache.flink.streaming.api.operators.TimestampedCollector.collect (TimestampedCollector.java:51)
  [43] org.apache.flink.table.runtime.CRowWrappingCollector.collect (CRowWrappingCollector.scala:37)
  [44] org.apache.flink.table.runtime.CRowWrappingCollector.collect (CRowWrappingCollector.scala:28)
  [45] DataStreamSourceConversion$9.processElement (null)
  [46] org.apache.flink.table.runtime.CRowOutputProcessRunner.processElement (CRowOutputProcessRunner.scala:67)
  [47] org.apache.flink.streaming.api.operators.ProcessOperator.processElement (ProcessOperator.java:66)
  [48] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.pushToOperator (OperatorChain.java:560)
  [49] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:535)
  [50] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:515)
  [51] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:679)
  [52] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:657)
  [53] org.apache.flink.streaming.api.operators.StreamSourceContexts$ManualWatermarkContext.processAndCollectWithTimestamp (StreamSourceContexts.java:310)
  [54] org.apache.flink.streaming.api.operators.StreamSourceContexts$WatermarkContext.collectWithTimestamp (StreamSourceContexts.java:409)
  [55] org.apache.flink.streaming.connectors.kafka.internals.AbstractFetcher.emitRecordWithTimestamp (AbstractFetcher.java:398)
  [56] org.apache.flink.streaming.connectors.kafka.internal.Kafka010Fetcher.emitRecord (Kafka010Fetcher.java:89)
  [57] org.apache.flink.streaming.connectors.kafka.internal.Kafka09Fetcher.runFetchLoop (Kafka09Fetcher.java:154)
  [58] org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase.run (FlinkKafkaConsumerBase.java:721)
  [59] org.apache.flink.streaming.api.operators.StreamSource.run (StreamSource.java:87)
  [60] org.apache.flink.streaming.api.operators.StreamSource.run (StreamSource.java:56)
  [61] org.apache.flink.streaming.runtime.tasks.SourceStreamTask.run (SourceStreamTask.java:99)
  [62] org.apache.flink.streaming.runtime.tasks.StreamTask.invoke (StreamTask.java:306)
  [63] org.apache.flink.runtime.taskmanager.Task.run (Task.java:703)
  [64] java.lang.Thread.run (Thread.java:748)



看来是通过一个线程池执行异步通知,handler是啥呢???

stop at org.apache.flink.runtime.io.network.netty.PartitionRequestQueue:75

找到了下面2个调用栈

[1] org.apache.flink.runtime.io.network.netty.PartitionRequestQueue.channelRegistered (PartitionRequestQueue.java:76)
  [2] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRegistered (AbstractChannelHandlerContext.java:162)
  [3] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireChannelRegistered (AbstractChannelHandlerContext.java:148)
  [4] org.apache.flink.shaded.netty4.io.netty.channel.ChannelInboundHandlerAdapter.channelRegistered (ChannelInboundHandlerAdapter.java:42)
  [5] org.apache.flink.runtime.io.network.netty.PartitionRequestServerHandler.channelRegistered (PartitionRequestServerHandler.java:68)
  [6] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRegistered (AbstractChannelHandlerContext.java:162)
  [7] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireChannelRegistered (AbstractChannelHandlerContext.java:148)
  [8] org.apache.flink.shaded.netty4.io.netty.channel.ChannelInboundHandlerAdapter.channelRegistered (ChannelInboundHandlerAdapter.java:42)
  [9] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRegistered (AbstractChannelHandlerContext.java:162)
  [10] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireChannelRegistered (AbstractChannelHandlerContext.java:148)
  [11] org.apache.flink.shaded.netty4.io.netty.channel.ChannelInboundHandlerAdapter.channelRegistered (ChannelInboundHandlerAdapter.java:42)
  [12] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRegistered (AbstractChannelHandlerContext.java:162)
  [13] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireChannelRegistered (AbstractChannelHandlerContext.java:148)
  [14] org.apache.flink.shaded.netty4.io.netty.channel.ChannelInitializer.channelRegistered (ChannelInitializer.java:71)
  [15] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRegistered (AbstractChannelHandlerContext.java:162)
  [16] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireChannelRegistered (AbstractChannelHandlerContext.java:148)
  [17] org.apache.flink.shaded.netty4.io.netty.channel.DefaultChannelPipeline.fireChannelRegistered (DefaultChannelPipeline.java:734)
  [18] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannel$AbstractUnsafe.register0 (AbstractChannel.java:450)
  [19] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannel$AbstractUnsafe.register (AbstractChannel.java:418)
  [20] org.apache.flink.shaded.netty4.io.netty.channel.SingleThreadEventLoop.register (SingleThreadEventLoop.java:60)
  [21] org.apache.flink.shaded.netty4.io.netty.channel.SingleThreadEventLoop.register (SingleThreadEventLoop.java:48)
  [22] org.apache.flink.shaded.netty4.io.netty.channel.MultithreadEventLoopGroup.register (MultithreadEventLoopGroup.java:64)
  [23] org.apache.flink.shaded.netty4.io.netty.bootstrap.ServerBootstrap$ServerBootstrapAcceptor.channelRead (ServerBootstrap.java:251)
  [24] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:339)
  [25] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead (AbstractChannelHandlerContext.java:324)
  [26] org.apache.flink.shaded.netty4.io.netty.channel.DefaultChannelPipeline.fireChannelRead (DefaultChannelPipeline.java:847)
  [27] org.apache.flink.shaded.netty4.io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read (AbstractNioMessageChannel.java:93)
  [28] org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKey (NioEventLoop.java:511)
  [29] org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized (NioEventLoop.java:468)
  [30] org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKeys (NioEventLoop.java:382)
  [31] org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.run (NioEventLoop.java:354)
  [32] org.apache.flink.shaded.netty4.io.netty.util.concurrent.SingleThreadEventExecutor$2.run (SingleThreadEventExecutor.java:111)
  [33] java.lang.Thread.run (Thread.java:748)

以及

90    		PartitionRequestServerHandler serverHandler = new PartitionRequestServerHandler(

Flink Netty Server (0) Thread 0[1] where
  [1] org.apache.flink.runtime.io.network.netty.NettyProtocol.getServerChannelHandlers (NettyProtocol.java:90)
  [2] org.apache.flink.runtime.io.network.netty.NettyServer$1.initChannel (NettyServer.java:161)
  [3] org.apache.flink.runtime.io.network.netty.NettyServer$1.initChannel (NettyServer.java:151)
  [4] org.apache.flink.shaded.netty4.io.netty.channel.ChannelInitializer.channelRegistered (ChannelInitializer.java:69)
  [5] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRegistered (AbstractChannelHandlerContext.java:162)
  [6] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireChannelRegistered (AbstractChannelHandlerContext.java:148)
  [7] org.apache.flink.shaded.netty4.io.netty.channel.DefaultChannelPipeline.fireChannelRegistered (DefaultChannelPipeline.java:734)
  [8] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannel$AbstractUnsafe.register0 (AbstractChannel.java:450)
  [9] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannel$AbstractUnsafe.register (AbstractChannel.java:418)
  [10] org.apache.flink.shaded.netty4.io.netty.channel.SingleThreadEventLoop.register (SingleThreadEventLoop.java:60)
  [11] org.apache.flink.shaded.netty4.io.netty.channel.SingleThreadEventLoop.register (SingleThreadEventLoop.java:48)
  [12] org.apache.flink.shaded.netty4.io.netty.channel.MultithreadEventLoopGroup.register (MultithreadEventLoopGroup.java:64)
  [13] org.apache.flink.shaded.netty4.io.netty.bootstrap.ServerBootstrap$ServerBootstrapAcceptor.channelRead (ServerBootstrap.java:251)
  [14] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:339)
  [15] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireChannelRead (AbstractChannelHandlerContext.java:324)
  [16] org.apache.flink.shaded.netty4.io.netty.channel.DefaultChannelPipeline.fireChannelRead (DefaultChannelPipeline.java:847)
  [17] org.apache.flink.shaded.netty4.io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read (AbstractNioMessageChannel.java:93)
  [18] org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKey (NioEventLoop.java:511)
  [19] org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized (NioEventLoop.java:468)
  [20] org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.processSelectedKeys (NioEventLoop.java:382)
  [21] org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.run (NioEventLoop.java:354)
  [22] org.apache.flink.shaded.netty4.io.netty.util.concurrent.SingleThreadEventExecutor$2.run (SingleThreadEventExecutor.java:111)
  [23] java.lang.Thread.run (Thread.java:748)

这让我发现了2个handler

	public ChannelHandler[] getServerChannelHandlers() {
		PartitionRequestQueue queueOfPartitionQueues = new PartitionRequestQueue();
		PartitionRequestServerHandler serverHandler = new PartitionRequestServerHandler(
			partitionProvider, taskEventDispatcher, queueOfPartitionQueues, creditBasedEnabled);

		return new ChannelHandler[] {
			messageEncoder,
			createFrameLengthDecoder(),
			messageDecoder,
			serverHandler,
			queueOfPartitionQueues
		};
	}
		bootstrap.childHandler(new ChannelInitializer<SocketChannel>() {
			@Override
			public void initChannel(SocketChannel channel) throws Exception {
				if (serverSSLContext != null) {
					SSLEngine sslEngine = serverSSLContext.createSSLEngine();
					config.setSSLVerAndCipherSuites(sslEngine);
					sslEngine.setUseClientMode(false);
					channel.pipeline().addLast("ssl", new SslHandler(sslEngine));
				}

				channel.pipeline().addLast(protocol.getServerChannelHandlers());
			}
		});

从名字来看,还挺吻合,尝试看看

先看最下面2个handler的初始化,断点就是

stop in org.apache.flink.runtime.io.network.netty.NettyProtocol.getServerChannelHandlers

初始化完毕后,我们看怎么触发的,断点在下面2个

stop in org.apache.flink.runtime.io.network.netty.PartitionRequestQueue.userEventTriggered

确实触发了

Breakpoint hit: "thread=Flink Netty Server (0) Thread 0", org.apache.flink.runtime.io.network.netty.PartitionRequestQueue.userEventTriggered(), line=175 bci=0
175    		if (msg instanceof NetworkSequenceViewReader) {

Flink Netty Server (0) Thread 0[1] where
  [1] org.apache.flink.runtime.io.network.netty.PartitionRequestQueue.userEventTriggered (PartitionRequestQueue.java:175)
  [2] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered (AbstractChannelHandlerContext.java:308)
  [3] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireUserEventTriggered (AbstractChannelHandlerContext.java:294)
  [4] org.apache.flink.shaded.netty4.io.netty.channel.ChannelInboundHandlerAdapter.userEventTriggered (ChannelInboundHandlerAdapter.java:108)
  [5] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered (AbstractChannelHandlerContext.java:308)
  [6] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireUserEventTriggered (AbstractChannelHandlerContext.java:294)
  [7] org.apache.flink.shaded.netty4.io.netty.channel.ChannelInboundHandlerAdapter.userEventTriggered (ChannelInboundHandlerAdapter.java:108)
  [8] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered (AbstractChannelHandlerContext.java:308)
  [9] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireUserEventTriggered (AbstractChannelHandlerContext.java:294)
  [10] org.apache.flink.shaded.netty4.io.netty.channel.ChannelInboundHandlerAdapter.userEventTriggered (ChannelInboundHandlerAdapter.java:108)
  [11] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered (AbstractChannelHandlerContext.java:308)
  [12] org.apache.flink.shaded.netty4.io.netty.channel.AbstractChannelHandlerContext.fireUserEventTriggered (AbstractChannelHandlerContext.java:294)
  [13] org.apache.flink.shaded.netty4.io.netty.channel.DefaultChannelPipeline.fireUserEventTriggered (DefaultChannelPipeline.java:841)
  [14] org.apache.flink.runtime.io.network.netty.PartitionRequestQueue$1.run (PartitionRequestQueue.java:95)
  [15] org.apache.flink.shaded.netty4.io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks (SingleThreadEventExecutor.java:357)
  [16] org.apache.flink.shaded.netty4.io.netty.channel.nio.NioEventLoop.run (NioEventLoop.java:357)
  [17] org.apache.flink.shaded.netty4.io.netty.util.concurrent.SingleThreadEventExecutor$2.run (SingleThreadEventExecutor.java:111)
  [18] java.lang.Thread.run (Thread.java:748)

继续打断点

stop in org.apache.flink.runtime.io.network.netty.PartitionRequestQueue.writeAndFlushNextMessageIfPossible

最后发出去的消息是

264    					channel.writeAndFlush(msg).addListener(writeListener);

Flink Netty Server (0) Thread 0[1] print msg
 msg = "org.apache.flink.runtime.io.network.netty.NettyMessage$BufferResponse@1ae5086"

打印这个channel,

channel = "[id: 0x4f18cfc9, /192.168.255.184:57834 => /192.168.255.185:35974]"

是别的机器过来连自己,发给客户端那边的,客户端那边怎么处理的???

 

 

 

数据通过group发出去了,那么谁来取呢?断点就是

stop in org.apache.flink.runtime.io.network.partition.consumer.SingleInputGate.getNextBufferOrEvent

 

 

确实有,不过是在groupby线程里的,调用栈如下:

  [1] org.apache.flink.runtime.io.network.partition.consumer.SingleInputGate.getNextBufferOrEvent (SingleInputGate.java:540)
  [2] org.apache.flink.runtime.io.network.partition.consumer.SingleInputGate.getNextBufferOrEvent (SingleInputGate.java:502)
  [3] org.apache.flink.streaming.runtime.io.BarrierBuffer.getNextNonBlocked (BarrierBuffer.java:165)
  [4] org.apache.flink.streaming.runtime.io.StreamInputProcessor.processInput (StreamInputProcessor.java:209)
  [5] org.apache.flink.streaming.runtime.tasks.OneInputStreamTask.run (OneInputStreamTask.java:103)
  [6] org.apache.flink.streaming.runtime.tasks.StreamTask.invoke (StreamTask.java:306)
  [7] org.apache.flink.runtime.taskmanager.Task.run (Task.java:703)
  [8] java.lang.Thread.run (Thread.java:748)

取完之后,剩下的就是被window operator处理了,调用栈是

  [1] org.apache.flink.streaming.runtime.operators.windowing.WindowOperator.processElement (WindowOperator.java:295)
  [2] org.apache.flink.streaming.runtime.io.StreamInputProcessor.processInput (StreamInputProcessor.java:202)
  [3] org.apache.flink.streaming.runtime.tasks.OneInputStreamTask.run (OneInputStreamTask.java:103)
  [4] org.apache.flink.streaming.runtime.tasks.StreamTask.invoke (StreamTask.java:306)
  [5] org.apache.flink.runtime.taskmanager.Task.run (Task.java:703)
  [6] java.lang.Thread.run (Thread.java:748)

对应的断点就是:

stop in org.apache.flink.streaming.runtime.operators.windowing.WindowOperator.processElement

结果发现一个大问题,这里的

print windowAssigner.getClass()
 windowAssigner.getClass() = "class org.apache.flink.streaming.api.windowing.assigners.TumblingProcessingTimeWindows"

这就恐怖了,我命名的是EventTime,为什么是ProcessingTime呢?定位到初始化函数

stop at org.apache.flink.streaming.runtime.operators.windowing.WindowOperator:193

最后检查本地java代码,搞定,验证如下

print windowAssigner.getClass()
 windowAssigner.getClass() = "class org.apache.flink.streaming.api.windowing.assigners.TumblingEventTimeWindows"

 

关于时间窗口,我们放到第12节讲,我们将继续的处理

stop in org.apache.flink.streaming.runtime.operators.windowing.WindowOperator.emitWindowContents

后面会把结果算出来,然后继续处理,所谓的调用栈如下

[1] DataStreamCalcRule$49.processElement (null)
  [2] org.apache.flink.table.runtime.CRowProcessRunner.processElement (CRowProcessRunner.scala:66)
  [3] org.apache.flink.table.runtime.CRowProcessRunner.processElement (CRowProcessRunner.scala:35)
  [4] org.apache.flink.streaming.api.operators.ProcessOperator.processElement (ProcessOperator.java:66)
  [5] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.pushToOperator (OperatorChain.java:560)
  [6] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:535)
  [7] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:515)
  [8] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:679)
  [9] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:657)
  [10] org.apache.flink.streaming.api.operators.TimestampedCollector.collect (TimestampedCollector.java:51)
  [11] org.apache.flink.table.runtime.aggregate.TimeWindowPropertyCollector.collect (TimeWindowPropertyCollector.scala:65)
  [12] org.apache.flink.table.runtime.aggregate.IncrementalAggregateWindowFunction.apply (IncrementalAggregateWindowFunction.scala:74)
  [13] org.apache.flink.table.runtime.aggregate.IncrementalAggregateTimeWindowFunction.apply (IncrementalAggregateTimeWindowFunction.scala:72)
  [14] org.apache.flink.table.runtime.aggregate.IncrementalAggregateTimeWindowFunction.apply (IncrementalAggregateTimeWindowFunction.scala:39)
  [15] org.apache.flink.streaming.runtime.operators.windowing.functions.InternalSingleValueWindowFunction.process (InternalSingleValueWindowFunction.java:46)
  [16] org.apache.flink.streaming.runtime.operators.windowing.WindowOperator.emitWindowContents (WindowOperator.java:550)
  [17] org.apache.flink.streaming.runtime.operators.windowing.WindowOperator.onEventTime (WindowOperator.java:457)
  [18] org.apache.flink.streaming.api.operators.HeapInternalTimerService.advanceWatermark (HeapInternalTimerService.java:288)
  [19] org.apache.flink.streaming.api.operators.InternalTimeServiceManager.advanceWatermark (InternalTimeServiceManager.java:108)
  [20] org.apache.flink.streaming.api.operators.AbstractStreamOperator.processWatermark (AbstractStreamOperator.java:734)
  [21] org.apache.flink.streaming.runtime.io.StreamInputProcessor$ForwardingValveOutputHandler.handleWatermark (StreamInputProcessor.java:262)
  [22] org.apache.flink.streaming.runtime.streamstatus.StatusWatermarkValve.findAndOutputNewMinWatermarkAcrossAlignedChannels (StatusWatermarkValve.java:189)
  [23] org.apache.flink.streaming.runtime.streamstatus.StatusWatermarkValve.inputWatermark (StatusWatermarkValve.java:111)
  [24] org.apache.flink.streaming.runtime.io.StreamInputProcessor.processInput (StreamInputProcessor.java:184)
  [25] org.apache.flink.streaming.runtime.tasks.OneInputStreamTask.run (OneInputStreamTask.java:103)
  [26] org.apache.flink.streaming.runtime.tasks.StreamTask.invoke (StreamTask.java:306)
  [27] org.apache.flink.runtime.taskmanager.Task.run (Task.java:703)
  [28] java.lang.Thread.run (Thread.java:748)

中间debug几次都是有问题,不过想一想应该是到了producer那块,

断点在

stop in org.apache.flink.streaming.connectors.kafka.FlinkKafkaProducerBase.open

也就是说,先看open的操作

  [1] org.apache.flink.streaming.connectors.kafka.FlinkKafkaProducerBase.open (FlinkKafkaProducerBase.java:215)
  [2] org.apache.flink.api.common.functions.util.FunctionUtils.openFunction (FunctionUtils.java:36)
  [3] org.apache.flink.streaming.api.operators.AbstractUdfStreamOperator.open (AbstractUdfStreamOperator.java:102)
  [4] org.apache.flink.streaming.api.operators.StreamSink.open (StreamSink.java:48)
  [5] org.apache.flink.streaming.runtime.tasks.StreamTask.openAllOperators (StreamTask.java:420)
  [6] org.apache.flink.streaming.runtime.tasks.StreamTask.invoke (StreamTask.java:296)
  [7] org.apache.flink.runtime.taskmanager.Task.run (Task.java:703)
  [8] java.lang.Thread.run (Thread.java:748)

最后看一下invoke的操作 

stop in org.apache.flink.streaming.connectors.kafka.partitioner.FlinkFixedPartitioner.partition

命中,直接看调用栈

[1] org.apache.flink.streaming.connectors.kafka.partitioner.FlinkFixedPartitioner.partition (FlinkFixedPartitioner.java:71)
  [2] org.apache.flink.streaming.connectors.kafka.FlinkKafkaProducer010.invoke (FlinkKafkaProducer010.java:375)
  [3] org.apache.flink.streaming.api.operators.StreamSink.processElement (StreamSink.java:56)
  [4] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.pushToOperator (OperatorChain.java:560)
  [5] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:535)
  [6] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:515)
  [7] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:679)
  [8] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:657)
  [9] org.apache.flink.streaming.api.operators.StreamMap.processElement (StreamMap.java:41)
  [10] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.pushToOperator (OperatorChain.java:560)
  [11] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:535)
  [12] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:515)
  [13] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:679)
  [14] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:657)
  [15] org.apache.flink.streaming.api.operators.TimestampedCollector.collect (TimestampedCollector.java:51)
  [16] org.apache.flink.table.runtime.CRowWrappingCollector.collect (CRowWrappingCollector.scala:37)
  [17] org.apache.flink.table.runtime.CRowWrappingCollector.collect (CRowWrappingCollector.scala:28)
  [18] DataStreamCalcRule$49.processElement (null)
  [19] org.apache.flink.table.runtime.CRowProcessRunner.processElement (CRowProcessRunner.scala:66)
  [20] org.apache.flink.table.runtime.CRowProcessRunner.processElement (CRowProcessRunner.scala:35)
  [21] org.apache.flink.streaming.api.operators.ProcessOperator.processElement (ProcessOperator.java:66)
  [22] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.pushToOperator (OperatorChain.java:560)
  [23] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:535)
  [24] org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect (OperatorChain.java:515)
  [25] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:679)
  [26] org.apache.flink.streaming.api.operators.AbstractStreamOperator$CountingOutput.collect (AbstractStreamOperator.java:657)
  [27] org.apache.flink.streaming.api.operators.TimestampedCollector.collect (TimestampedCollector.java:51)
  [28] org.apache.flink.table.runtime.aggregate.TimeWindowPropertyCollector.collect (TimeWindowPropertyCollector.scala:65)
  [29] org.apache.flink.table.runtime.aggregate.IncrementalAggregateWindowFunction.apply (IncrementalAggregateWindowFunction.scala:74)
  [30] org.apache.flink.table.runtime.aggregate.IncrementalAggregateTimeWindowFunction.apply (IncrementalAggregateTimeWindowFunction.scala:72)
  [31] org.apache.flink.table.runtime.aggregate.IncrementalAggregateTimeWindowFunction.apply (IncrementalAggregateTimeWindowFunction.scala:39)
  [32] org.apache.flink.streaming.runtime.operators.windowing.functions.InternalSingleValueWindowFunction.process (InternalSingleValueWindowFunction.java:46)
  [33] org.apache.flink.streaming.runtime.operators.windowing.WindowOperator.emitWindowContents (WindowOperator.java:550)
  [34] org.apache.flink.streaming.runtime.operators.windowing.WindowOperator.onEventTime (WindowOperator.java:457)
  [35] org.apache.flink.streaming.api.operators.HeapInternalTimerService.advanceWatermark (HeapInternalTimerService.java:288)
  [36] org.apache.flink.streaming.api.operators.InternalTimeServiceManager.advanceWatermark (InternalTimeServiceManager.java:108)
  [37] org.apache.flink.streaming.api.operators.AbstractStreamOperator.processWatermark (AbstractStreamOperator.java:734)
  [38] org.apache.flink.streaming.runtime.io.StreamInputProcessor$ForwardingValveOutputHandler.handleWatermark (StreamInputProcessor.java:262)
  [39] org.apache.flink.streaming.runtime.streamstatus.StatusWatermarkValve.findAndOutputNewMinWatermarkAcrossAlignedChannels (StatusWatermarkValve.java:189)
  [40] org.apache.flink.streaming.runtime.streamstatus.StatusWatermarkValve.inputWatermark (StatusWatermarkValve.java:111)
  [41] org.apache.flink.streaming.runtime.io.StreamInputProcessor.processInput (StreamInputProcessor.java:184)
  [42] org.apache.flink.streaming.runtime.tasks.OneInputStreamTask.run (OneInputStreamTask.java:103)
  [43] org.apache.flink.streaming.runtime.tasks.StreamTask.invoke (StreamTask.java:306)
  [44] org.apache.flink.runtime.taskmanager.Task.run (Task.java:703)
  [45] java.lang.Thread.run (Thread.java:748)

 

转载于:https://my.oschina.net/qiangzigege/blog/2208746

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值