下面我们看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
会看到
这里的调用栈就是
[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)