All Products
Search
Document Center

Realtime Compute for Apache Flink:Kesalahan Pelaksanaan Pekerjaan

Last Updated:Jan 14, 2026

Topik ini menjelaskan masalah umum dan solusinya terkait kesalahan eksekusi job di Realtime Compute for Apache Flink.

Bagaimana cara melakukan troubleshooting job yang gagal dimulai?

  • Deskripsi masalah

    Setelah Anda mengklik tombol Start, status job berubah dari Starting menjadi Failed.

  • Solusi

    • Pada tab Events, klik ikon image untuk memperluas detail dan mengidentifikasi penyebab pesan error.

    • Pada tab Logs, periksa log startup untuk menemukan exception dan lakukan troubleshooting berdasarkan informasi yang tersedia.

    • Jika JobManager berhasil dimulai, Anda dapat melihat log JobManager atau TaskManager secara rinci pada tab Logs.

  • Error umum

    Detail error

    Penyebab

    Solusi

    ERROR: exceeded quota: resourcequota

    Antrian sumber daya memiliki sumber daya yang tidak mencukupi.

    Upgrade atau downgrade sumber daya untuk antrian sumber daya, atau kurangi sumber daya yang dibutuhkan untuk memulai job.

    ERROR:the vswitch ip is not enough

    Jumlah alamat IP yang tersedia dalam proyek lebih sedikit daripada jumlah TaskManager (TM) yang dibutuhkan oleh job.

    Kurangi parallelism, konfigurasikan slot dengan benar, atau ubah virtual switch ruang kerja.

    ERROR: pooler: ***: authentication failed

    AccessKey yang diberikan dalam kode tidak valid atau tidak memiliki izin yang diperlukan.

    Berikan AccessKey yang valid dan memiliki izin yang diperlukan.

Apa yang harus saya lakukan jika muncul pop-up error koneksi database di sisi kanan halaman?

  • Detail

    image

  • Penyebab

    Catalog yang terdaftar tidak valid dan tidak dapat dihubungkan.

  • Solusi

    Pada halaman Data Management, lihat semua catalog. Hapus catalog yang berwarna abu-abu, lalu daftarkan ulang.

Apa yang harus saya lakukan jika data dalam pipeline tidak dikonsumsi setelah job berjalan?

  • Periksa konektivitas jaringan

    Jika komponen upstream dan downstream tidak menghasilkan atau mengonsumsi data, pertama-tama periksa halaman Startup Logs untuk mencari pesan error. Jika muncul error timeout, lakukan troubleshooting konektivitas jaringan untuk komponen tersebut.

  • Periksa status eksekusi task

    Pada halaman Overview, periksa apakah source mengirim data dan sink menerima data untuk mengidentifikasi lokasi masalah.

    image

  • Lakukan pemeriksaan tautan data secara menyeluruh

    Tambahkan tabel sink print ke setiap aliran data untuk melakukan troubleshooting.

Apa yang harus saya lakukan jika job restart setelah berjalan?

Anda dapat melakukan troubleshooting pada tab Logs job:

  • Periksa exceptions.

    Pada tab Exceptions, lihat exception yang dilemparkan dan lakukan troubleshooting berdasarkan informasi yang tersedia.

  • Lihat log JobManager dan TaskManager.

    image

  • Lihat log failed TaskManagers.

    Beberapa exception dapat menyebabkan TaskManager gagal. Log TaskManager yang baru dijadwalkan mungkin tidak lengkap. Anda dapat melihat log TaskManager yang sebelumnya gagal untuk troubleshooting.

    image

  • Lihat log historical job runs.

    Pilih log dari jalannya job historis saat ini untuk menemukan penyebab kegagalan.

    image

Mengapa data terjebak di node LocalGroupAggregate dalam waktu lama tanpa output?

  • Kode pekerjaan

    CREATE TEMPORARY TABLE s1 (
      a INT,
      b INT,
      ts as PROCTIME(),
      PRIMARY KEY (a) NOT ENFORCED
    ) WITH (
      'connector'='datagen',
      'rows-per-second'='1',
      'fields.b.kind'='random',
      'fields.b.min'='0',
      'fields.b.max'='10'
    );
    
    CREATE TEMPORARY TABLE sink (
      a BIGINT,
      b BIGINT
    ) WITH (
      'connector'='print'
    );
    
    CREATE TEMPORARY VIEW window_view AS
    SELECT window_start, window_end, a, sum(b) as b_sum FROM TABLE(TUMBLE(TABLE s1, DESCRIPTOR(ts), INTERVAL '2' SECONDS)) GROUP BY window_start, window_end, a;
    
    INSERT INTO sink SELECT count(distinct a), b_sum FROM window_view GROUP BY b_sum;
  • Deskripsi masalah

    Data terjebak di node LocalGroupAggregate dalam waktu lama tanpa output, dan node MiniBatchAssigner tidak ada.

    image

  • Penyebab

    Jika job berisi WindowAggregate dan GroupAggregate, serta kolom waktu untuk WindowAggregate adalah processing time (proctime), mode pemrosesan MiniBatch menggunakan managed memory untuk menyimpan cache data jika parameter table.exec.mini-batch.size tidak dikonfigurasi atau diatur ke nilai negatif. Hal ini juga mencegah pembuatan node MiniBatchAssigner.

    Akibatnya, node komputasi tidak dapat menerima pesan watermark dari node MiniBatchAssigner untuk memicu perhitungan dan output. Perhitungan dan output hanya dipicu ketika salah satu dari tiga kondisi terpenuhi: managed memory penuh, checkpoint akan terjadi, atau job berhenti. Untuk informasi lebih lanjut, lihat table.exec.mini-batch.size. Jika interval checkpoint terlalu lama, data menumpuk di node LocalGroupAggregate dan tidak di-output dalam periode yang lama.

  • Solusi

    • Kurangi interval checkpoint. Ini memungkinkan node LocalGroupAggregate secara otomatis memicu output sebelum checkpoint terjadi. Untuk informasi lebih lanjut tentang cara mengatur interval checkpoint, lihat Tuning Checkpointing.

    • Gunakan heap memory untuk menyimpan cache data. Ini memungkinkan node LocalGroupAggregate secara otomatis memicu output ketika jumlah catatan data yang di-cache mencapai N. Untuk melakukannya, atur parameter table.exec.mini-batch.size ke nilai positif N. Untuk informasi lebih lanjut tentang konfigurasi parameter, lihat Bagaimana cara mengonfigurasi parameter custom job running?

Apa yang harus dilakukan jika partisi connector upstream tidak menerima data, menyebabkan watermark terhenti dan output window tertunda?

Sebagai contoh, pertimbangkan source Kafka dengan lima partisi. Dua catatan baru tiba setiap menit, tetapi tidak setiap partisi menerima data secara real-time. Jika source tidak menerima elemen apa pun dalam periode timeout, partisi tersebut ditandai sebagai idle sementara. Akibatnya, watermark tidak dapat maju, window tidak dapat ditutup tepat waktu, dan hasil tidak di-output secara real-time.

Dalam kasus ini, Anda dapat mengatur time-to-live (TTL) untuk menunjukkan bahwa partisi tidak memiliki data. Hal ini mengecualikan partisi dari perhitungan watermark. Ketika data tiba, partisi tersebut dimasukkan kembali ke dalam perhitungan. Untuk informasi lebih lanjut, lihat Configuration.

Pada bagian Additional Configurations, tambahkan kode berikut. Untuk informasi lebih lanjut, lihat Bagaimana cara mengonfigurasi parameter custom job running?.

table.exec.source.idle-timeout: 1s

Bagaimana cara cepat menemukan masalah jika JobManager tidak berjalan?

Jika JobManager tidak berjalan, Anda tidak dapat mengakses halaman Flink UI. Dalam kasus ini, Anda dapat mengidentifikasi penyebab kegagalan dengan langkah-langkah berikut:

  1. Pada halaman Operation Center > Job O&M, klik nama job target.

  2. Klik tab Events.

  3. Gunakan pintasan keyboard untuk mencari "error" dan mengambil informasi exception.

    • Windows: Ctrl+F

    • macOS: Command+F

    Example

INFO: org.apache.flink.fs.osshadoop.shaded.com.aliyun.oss

  • Detail errorError details

  • Penyebab

    Kelas penyimpanan adalah OSS Bucket. Saat OSS membuat folder baru, OSS terlebih dahulu memeriksa apakah folder tersebut sudah ada. Jika folder tidak ada, pesan INFO ini dilaporkan. Pesan ini tidak memengaruhi job Flink.

  • Solusi

    Tambahkan <Logger level="ERROR" name="org.apache.flink.fs.osshadoop.shaded.com.aliyun.oss"/> ke templat log. Untuk informasi lebih lanjut, lihat Konfigurasi output log job.

Error: akka.pattern.AskTimeoutException

  • Penyebab

    • Pengumpulan sampah (GC) berkelanjutan terjadi karena memori JobManager atau TaskManager tidak mencukupi. Hal ini menyebabkan heartbeat dan permintaan Remote Procedure Call (RPC) antara JobManager dan TaskManager timeout.

    • Job berukuran besar, artinya volume permintaan RPC tinggi. Namun, sumber daya JobManager tidak mencukupi, menyebabkan penumpukan permintaan RPC. Hal ini menyebabkan timeout untuk heartbeat dan permintaan RPC antara JobManager dan TaskManager.

    • Parameter timeout job diatur ke nilai kecil. Ketika koneksi ke produk pihak ketiga gagal, sistem mencoba menghubungkan kembali beberapa kali. Hal ini mencegah error kegagalan koneksi dilemparkan sebelum timeout tercapai.

  • Solusi

    • Jika error disebabkan oleh GC berkelanjutan, periksa waktu yang dikonsumsi dan frekuensi GC berdasarkan penggunaan memori job dan log GC. Jika ditemukan GC berfrekuensi tinggi atau waktu GC yang lama, tingkatkan memori JobManager dan TaskManager.

    • Jika error disebabkan oleh job besar, tingkatkan sumber daya CPU dan memori JobManager. Anda juga dapat meningkatkan nilai parameter akka.ask.timeout dan heartbeat.timeout.

      Penting
      • Kami merekomendasikan Anda hanya menyesuaikan dua parameter ini untuk job berskala besar. Untuk job skala kecil, error ini biasanya bukan disebabkan oleh nilai parameter yang kecil.

      • Atur parameter ini sesuai kebutuhan. Jika nilainya terlalu besar, waktu pemulihan job meningkat jika TaskManager keluar secara tak terduga.

    • Jika timeout disebabkan oleh kegagalan koneksi ke produk pihak ketiga, pertama-tama tingkatkan nilai empat parameter berikut agar error pihak ketiga dapat dilemparkan. Setelah itu, Anda dapat menyelesaikan error pihak ketiga tersebut.

      • client.timeout: Default: 60 s. Direkomendasikan: 600 s.

      • akka.ask.timeout: Default: 10 s. Direkomendasikan: 600 s.

      • client.heartbeat.timeout: Default: 180000 s. Direkomendasikan: 600000 s. Saat memasukkan nilai, jangan sertakan unitnya. Jika tidak, error startup dapat terjadi. Misalnya, Anda dapat memasukkan client.heartbeat.timeout: 600000.

      • heartbeat.timeout: Default: 50000 ms. Direkomendasikan: 600000 ms. Saat memasukkan nilai, jangan sertakan unitnya. Jika tidak, error startup dapat terjadi. Misalnya, Anda dapat memasukkan heartbeat.timeout: 600000.

      Sebagai contoh, error Caused by: java.sql.SQLTransientConnectionException: connection-pool-xxx.mysql.rds.aliyuncs.com:3306 - Connection is not available, request timed out after 30000ms menunjukkan bahwa kolam koneksi MySQL penuh. Anda harus meningkatkan nilai parameter connection.pool.size dalam opsi WITH MySQL. Nilai default-nya adalah 20.

      Catatan

      Anda dapat menentukan nilai minimum untuk parameter di atas berdasarkan pesan error timeout. Sebagai contoh, dalam pattern.AskTimeoutException: Ask timed out on [Actor[akka://flink/user/rpc/dispatcher_1#1064915964]] after [60000 ms]., 60000 ms adalah nilai saat ini dari client.timeout.

Error: Task did not exit gracefully within 180 + seconds.

  • Detail error

    Task did not exit gracefully within 180 + seconds.
    2022-04-22T17:32:25.852861506+08:00 stdout F org.apache.flink.util.FlinkRuntimeException: Task did not exit gracefully within 180 + seconds.
    2022-04-22T17:32:25.852865065+08:00 stdout F at org.apache.flink.runtime.taskmanager.Task$TaskCancelerWatchDog.run(Task.java:1709) [flink-dist_2.11-1.12-vvr-3.0.4-SNAPSHOT.jar:1.12-vvr-3.0.4-SNAPSHOT]
    2022-04-22T17:32:25.852867996+08:00 stdout F at java.lang.Thread.run(Thread.java:834) [?:1.8.0_102]
    log_level:ERROR
  • Penyebab

    Error ini bukan penyebab utama exception job. Nilai default parameter task.cancellation.timeout, yang menentukan timeout untuk task keluar, adalah 180 detik. Selama proses failover atau keluar job, keluar task mungkin diblokir karena suatu alasan. Ketika waktu pemblokiran mencapai timeout, Flink menentukan bahwa task macet dan tidak dapat dipulihkan. Flink kemudian secara aktif menghentikan TaskManager tempat task tersebut berada agar proses failover atau keluar dapat berlanjut. Inilah mengapa error ini muncul dalam log.

    Penyebab sebenarnya mungkin masalah pada implementasi user-defined function (UDF) Anda, seperti blok yang berjalan lama di metode close atau metode perhitungan yang tidak mengembalikan hasil dalam waktu lama.

  • Solusi

    Atur parameter task.cancellation.timeout ke 0. Untuk informasi lebih lanjut tentang cara mengonfigurasi parameter ini, lihat Bagaimana cara mengonfigurasi parameter custom job running? Saat nilainya 0, keluar task yang diblokir tidak akan timeout, dan task akan menunggu tanpa batas hingga proses keluar selesai. Setelah Anda me-restart job, jika menemukan bahwa job kembali terblokir dalam waktu lama selama failover atau keluar, temukan task yang berada dalam status Cancelling. Periksa stack task tersebut untuk menyelidiki penyebab utama, lalu selesaikan masalah tersebut.

    Penting

    Parameter task.cancellation.timeout digunakan untuk debugging job. Jangan atur parameter ini ke 0 untuk job produksi.

Error: Can not retract a non-existent record. This should never happen.

  • Detail error

    java.lang.RuntimeException: Can not retract a non-existent record. This should never happen.
        at org.apache.flink.table.runtime.operators.rank.RetractableTopNFunction.processElement(RetractableTopNFunction.java:196)
        at org.apache.flink.table.runtime.operators.rank.RetractableTopNFunction.processElement(RetractableTopNFunction.java:55)
        at org.apache.flink.streaming.api.operators.KeyedProcessOperator.processElement(KeyedProcessOperator.java:83)
        at org.apache.flink.streaming.runtime.tasks.OneInputStreamTask$StreamTaskNetworkOutput.emitRecord(OneInputStreamTask.java:205)
        at org.apache.flink.streaming.runtime.io.AbstractStreamTaskNetworkInput.processElement(AbstractStreamTaskNetworkInput.java:135)
        at org.apache.flink.streaming.runtime.io.AbstractStreamTaskNetworkInput.emitNext(AbstractStreamTaskNetworkInput.java:106)
        at org.apache.flink.streaming.runtime.io.StreamOneInputProcessor.processInput(StreamOneInputProcessor.java:66)
        at org.apache.flink.streaming.runtime.tasks.StreamTask.processInput(StreamTask.java:424)
        at org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.runMailboxLoop(MailboxProcessor.java:204)
        at org.apache.flink.streaming.runtime.tasks.StreamTask.runMailboxLoop(StreamTask.java:685)
        at org.apache.flink.streaming.runtime.tasks.StreamTask.executeInvoke(StreamTask.java:640)
        at org.apache.flink.streaming.runtime.tasks.StreamTask.runWithCleanUpOnFail(StreamTask.java:651)
        at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:624)
        at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:799)
        at org.apache.flink.runtime.taskmanager.Task.run(Task.java:586)
        at java.lang.Thread.run(Thread.java:877)
                        
  • Penyebab dan solusi

    Skenario

    Penyebab

    Solusi

    Skenario 1

    Disebabkan oleh fungsi now() dalam kode.

    TopN tidak mendukung bidang non-deterministik dalam klausa ORDER BY atau PARTITION BY. Fungsi now() mengembalikan nilai berbeda setiap kali dipanggil, sehingga retraction tidak dapat menemukan nilai sebelumnya.

    Gunakan bidang dari tabel sumber yang hanya menghasilkan nilai deterministik untuk klausa ORDER BY dan PARTITION BY.

    Skenario 2

    Nilai parameter table.exec.state.ttl terlalu kecil. State dihapus setelah kedaluwarsa, dan keystate yang sesuai tidak dapat ditemukan selama retraction.

    Tingkatkan nilai parameter table.exec.state.ttl. Untuk informasi lebih lanjut tentang cara mengonfigurasi parameter ini, lihat Bagaimana cara mengonfigurasi parameter custom job running?.

Error: The GRPC call timed out in sqlserver

  • Detail error

    org.apache.flink.table.sqlserver.utils.ExecutionTimeoutException: The GRPC call timed out in sqlserver, please check the thread stacktrace for root cause:
    
    Thread name: sqlserver-operation-pool-thread-4, thread state: TIMED_WAITING, thread stacktrace:
        at java.lang.Thread.sleep0(Native Method)
        at java.lang.Thread.sleep(Thread.java:360)
        at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.processWaitTimeAndRetryInfo(RetryInvocationHandler.java:130)
        at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeOnce(RetryInvocationHandler.java:107)
        at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:359)
        at com.sun.proxy.$Proxy195.getFileInfo(Unknown Source)
        at org.apache.hadoop.hdfs.DFSClient.getFileInfo(DFSClient.java:1661)
        at org.apache.hadoop.hdfs.DistributedFileSystem$29.doCall(DistributedFileSystem.java:1577)
        at org.apache.hadoop.hdfs.DistributedFileSystem$29.doCall(DistributedFileSystem.java:1574)
        at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
        at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1589)
        at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:1683)
        at org.apache.flink.connectors.hive.HiveSourceFileEnumerator.getNumFiles(HiveSourceFileEnumerator.java:118)
        at org.apache.flink.connectors.hive.HiveTableSource.lambda$getDataStream$0(HiveTableSource.java:209)
        at org.apache.flink.connectors.hive.HiveTableSource$$Lambda$972/1139330351.get(Unknown Source)
        at org.apache.flink.connectors.hive.HiveParallelismInference.logRunningTime(HiveParallelismInference.java:118)
        at org.apache.flink.connectors.hive.HiveParallelismInference.infer(HiveParallelismInference.java:100)
        at org.apache.flink.connectors.hive.HiveTableSource.getDataStream(HiveTableSource.java:207)
        at org.apache.flink.connectors.hive.HiveTableSource$1.produceDataStream(HiveTableSource.java:123)
        at org.apache.flink.table.planner.plan.nodes.exec.common.CommonExecTableSourceScan.translateToPlanInternal(CommonExecTableSourceScan.java:127)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.translateToPlan(ExecNodeBase.java:226)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecEdge.translateToPlan(ExecEdge.java:290)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.lambda$translateInputToPlan$5(ExecNodeBase.java:267)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase$$Lambda$949/77002396.apply(Unknown Source)
        at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
        at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
        at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.translateInputToPlan(ExecNodeBase.java:268)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.translateInputToPlan(ExecNodeBase.java:241)
        at org.apache.flink.table.planner.plan.nodes.exec.stream.StreamExecExchange.translateToPlanInternal(StreamExecExchange.java:87)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.translateToPlan(ExecNodeBase.java:226)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecEdge.translateToPlan(ExecEdge.java:290)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.lambda$translateInputToPlan$5(ExecNodeBase.java:267)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase$$Lambda$949/77002396.apply(Unknown Source)
        at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
        at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
        at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.translateInputToPlan(ExecNodeBase.java:268)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.translateInputToPlan(ExecNodeBase.java:241)
        at org.apache.flink.table.planner.plan.nodes.exec.stream.StreamExecGroupAggregate.translateToPlanInternal(StreamExecGroupAggregate.java:148)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.translateToPlan(ExecNodeBase.java:226)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecEdge.translateToPlan(ExecEdge.java:290)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.lambda$translateInputToPlan$5(ExecNodeBase.java:267)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase$$Lambda$949/77002396.apply(Unknown Source)
        at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
        at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
        at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
        at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.translateInputToPlan(ExecNodeBase.java:268)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.translateInputToPlan(ExecNodeBase.java:241)
        at org.apache.flink.table.planner.plan.nodes.exec.stream.StreamExecSink.translateToPlanInternal(StreamExecSink.java:108)
        at org.apache.flink.table.planner.plan.nodes.exec.ExecNodeBase.translateToPlan(ExecNodeBase.java:226)
        at org.apache.flink.table.planner.delegation.StreamPlanner$$anonfun$1.apply(StreamPlanner.scala:74)
        at org.apache.flink.table.planner.delegation.StreamPlanner$$anonfun$1.apply(StreamPlanner.scala:73)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
        at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
        at scala.collection.Iterator$class.foreach(Iterator.scala:891)
        at scala.collection.AbstractIterator.foreach(Iterator.scala:1334)
        at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
        at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
        at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
        at scala.collection.AbstractTraversable.map(Traversable.scala:104)
        at org.apache.flink.table.planner.delegation.StreamPlanner.translateToPlan(StreamPlanner.scala:73)
        at org.apache.flink.table.planner.delegation.StreamExecutor.createStreamGraph(StreamExecutor.java:52)
        at org.apache.flink.table.planner.delegation.PlannerBase.createStreamGraph(PlannerBase.scala:610)
        at org.apache.flink.table.planner.delegation.StreamPlanner.explainExecNodeGraphInternal(StreamPlanner.scala:166)
        at org.apache.flink.table.planner.delegation.StreamPlanner.explainExecNodeGraph(StreamPlanner.scala:159)
        at org.apache.flink.table.sqlserver.execution.OperationExecutorImpl.validate(OperationExecutorImpl.java:304)
        at org.apache.flink.table.sqlserver.execution.OperationExecutorImpl.validate(OperationExecutorImpl.java:288)
        at org.apache.flink.table.sqlserver.execution.DelegateOperationExecutor.lambda$validate$22(DelegateOperationExecutor.java:211)
        at org.apache.flink.table.sqlserver.execution.DelegateOperationExecutor$$Lambda$394/1626790418.run(Unknown Source)
        at org.apache.flink.table.sqlserver.execution.DelegateOperationExecutor.wrapClassLoader(DelegateOperationExecutor.java:250)
        at org.apache.flink.table.sqlserver.execution.DelegateOperationExecutor.lambda$wrapExecutor$26(DelegateOperationExecutor.java:275)
        at org.apache.flink.table.sqlserver.execution.DelegateOperationExecutor$$Lambda$395/1157752141.run(Unknown Source)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1147)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:622)
        at java.lang.Thread.run(Thread.java:834)
    
        at org.apache.flink.table.sqlserver.execution.DelegateOperationExecutor.wrapExecutor(DelegateOperationExecutor.java:281)
        at org.apache.flink.table.sqlserver.execution.DelegateOperationExecutor.validate(DelegateOperationExecutor.java:211)
        at org.apache.flink.table.sqlserver.FlinkSqlServiceImpl.validate(FlinkSqlServiceImpl.java:786)
        at org.apache.flink.table.sqlserver.proto.FlinkSqlServiceGrpc$MethodHandlers.invoke(FlinkSqlServiceGrpc.java:2522)
        at io.grpc.stub.ServerCalls$UnaryServerCallHandler$UnaryServerCallListener.onHalfClose(ServerCalls.java:172)
        at io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.halfClosed(ServerCallImpl.java:331)
        at io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed.runInContext(ServerImpl.java:820)
        at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
        at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1147)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:622)
        at java.lang.Thread.run(Thread.java:834)
    Caused by: java.util.concurrent.TimeoutException
        at java.util.concurrent.FutureTask.get(FutureTask.java:205)
        at org.apache.flink.table.sqlserver.execution.DelegateOperationExecutor.wrapExecutor(DelegateOperationExecutor.java:277)
        ... 11 more
                        
  • Penyebab

    Pernyataan SQL yang terlalu kompleks dapat menyebabkan exception timeout.

  • Solusi

    Pada bagian Additional Configurations, tambahkan kode berikut untuk meningkatkan batas timeout default 120 detik. Untuk informasi lebih lanjut, lihat Bagaimana cara mengonfigurasi parameter custom job running?.

    flink.sqlserver.rpc.execution.timeout: 600s

Error: RESOURCE_EXHAUSTED: gRPC message exceeds maximum size 41943040: 58384051

  • Detail error

    Caused by: io.grpc.StatusRuntimeException: RESOURCE_EXHAUSTED: gRPC message exceeds maximum size 41943040: 58384051
    
    at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:244)
    
    at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:225)
    
    at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:142)
    
    at org.apache.flink.table.sqlserver.proto.FlinkSqlServiceGrpc$FlinkSqlServiceBlockingStub.generateJobGraph(FlinkSqlServiceGrpc.java:2478)
    
    at org.apache.flink.table.sqlserver.api.client.FlinkSqlServerProtoClientImpl.generateJobGraph(FlinkSqlServerProtoClientImpl.java:456)
    
    at org.apache.flink.table.sqlserver.api.client.ErrorHandlingProtoClient.lambda$generateJobGraph$25(ErrorHandlingProtoClient.java:251)
    
    at org.apache.flink.table.sqlserver.api.client.ErrorHandlingProtoClient.invokeRequest(ErrorHandlingProtoClient.java:335)
    
    ... 6 more
    Cause: RESOURCE_EXHAUSTED: gRPC message exceeds maximum size 41943040: 58384051)
  • Penyebab

    Logika job sangat kompleks, sehingga JobGraph yang dihasilkan terlalu besar. Hal ini dapat menyebabkan error validasi atau job macet selama startup atau shutdown.

  • Solusi

    Pada bagian Additional Configurations, tambahkan kode berikut. Untuk informasi lebih lanjut, lihat Bagaimana cara mengonfigurasi parameter custom job running?.

     table.exec.operator-name.max-length: 1000

Error: Caused by: java.lang.NoSuchMethodError

  • Detail error

    Error: Caused by: java.lang.NoSuchMethodError: org.apache.flink.table.planner.plan.metadata.FlinkRelMetadataQuery.getUpsertKeysInKeyGroupRange(Lorg/apache/calcite/rel/RelNode;[I)Ljava/util/Set
  • Penyebab

    Jika Anda bergantung pada API internal dari komunitas, dan versi API ini di Alibaba Cloud telah dioptimalkan, exception seperti konflik package dapat terjadi.

  • Solusi

    Dalam kode sumber Flink, hanya metode yang secara eksplisit dianotasi dengan @Public atau @PublicEvolving yang merupakan API publik yang dapat Anda panggil. Alibaba Cloud hanya menjamin kompatibilitas untuk metode-metode tersebut.

Error: java.lang.ClassCastException: org.codehaus.janino.CompilerFactory cannot be cast to org.codehaus.commons.compiler.ICompilerFactory

  • Detail error

    Causedby:java.lang.ClassCastException:org.codehaus.janino.CompilerFactorycannotbecasttoorg.codehaus.commons.compiler.ICompilerFactory
        atorg.codehaus.commons.compiler.CompilerFactoryFactory.getCompilerFactory(CompilerFactoryFactory.java:129)
        atorg.codehaus.commons.compiler.CompilerFactoryFactory.getDefaultCompilerFactory(CompilerFactoryFactory.java:79)
        atorg.apache.calcite.rel.metadata.JaninoRelMetadataProvider.compile(JaninoRelMetadataProvider.java:426)
        ...66more
  • Penyebab

    • Paket JAR mencakup dependensi janino yang konflik.

    • Paket JAR user-defined function (UDF) atau connector JAR mencakup JAR yang diawali dengan flink-, seperti flink-table-planner dan flink-table-runtime.

  • Solusi

    • Analisis apakah paket JAR berisi org.codehaus.janino.CompilerFactory. Konflik kelas dapat terjadi karena urutan pemuatan kelas berbeda di mesin yang berbeda. Untuk mengatasi masalah ini, lakukan langkah-langkah berikut:

      1. Pada halaman Operation Center > Job O&M, klik nama job target.

      2. Pada tab Deployment Details, klik Edit di sebelah kanan bagian Running Parameter Configuration.

      3. Pada kotak teks Additional Configurations, masukkan parameter berikut dan klik Save.

        classloader.parent-first-patterns.additional: org.codehaus.janino

        Ganti nilai parameter dengan kelas yang konflik.

    • Atur cakupan untuk dependensi terkait Flink ke `provided` dengan menambahkan <scope>provided</scope>. Hal ini terutama berlaku untuk dependensi non-Connector dalam grup org.apache.flink yang diawali dengan flink-.