簡體   English   中英

Kafka Streams:錯誤退出的正確方法

[英]Kafka Streams: Proper way to exit on error

我已經成功地獲得了一個使用,轉換和生成數據的流應用程序,但我注意到,流處理器會定期轉換到ERROR狀態,並且該進程將在不退出的情況下停留在那里。

顯示我的日志:

All stream threads have died. The instance will be in error state and should be closed.

有沒有辦法告訴Streams應用程序一旦達到ERROR狀態就退出? 也許是各種監視器線程?

我看到Kafka Streams代碼的注釋中的引用給需要在應用程序達到此狀態時關閉應用程序的用戶,但是,我無法在文檔中找到提及此任務的內容。

有沒有一種簡單的方法來執行此關閉步驟?


可能是錯誤的方式可能關閉錯誤

我的目的是在KafkaStreams對象上設置UncaughtExceptionHandler方法,以執行以下操作:

  • 記錄錯誤
  • 使用原始KafkaStreams對象上的close方法關閉流

結果是:

  • 記錄異常消息
  • INFO org.apache.kafka.streams.KafkaStreams ... State transition from ERROR to PENDING_SHUTDOWN
  • INFO org.apache.kafka.streams.processor.internals.StreamThread ... Informed to shut down

然后,不幸的是,這個過程似乎沒有退出。

FWIW我覺得這可能是對setUncaughtExceptionHandler的誤用

使用UncaughtExceptionHandler是正確的。 但是,如果在處理程序回調中調用KafkaStreams#close() ,則可能會遇到死鎖。 因此,您應該只設置一個標志,並在回調之外調用#close() ,或者使用close()和超時。 如果超時到期,則強制關閉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM