Exception Handling trong Spring for Apache Kafka Streams – Phần 2

Trong bài viết trước, chúng ta đã tìm hiểu chi tiết 2 loại exception handlers trong Spring for Apache Kafka Streams là DeserializationExceptionHandlerProcessingExceptionHandler. Trong bài viết này, chúng ta hãy cùng nhau tìm hiểu exception handler còn lại là ProductionExceptionHandler, các bạn nhé!

Như mình đã nói ở bài viết trước, ProductionExceptionHandler sẽ handle lỗi xảy ra khi ứng dụng produce các output messages.

Cho interface ProductionExceptionHandler thì Apache Kafka Streams chỉ hỗ trợ 1 implementation là DefaultProductionExceptionHandler, còn Spring for Apache Kafka hỗ trợ thêm class RecoveringProductionExceptionHandler nha các bạn!

Ví dụ mình cũng có một stream topology như sau:

Cho stream topology này thì sau khi nhận message từ topic users, mình sẽ publish một message vào topic output. Message này sẽ được serialize từ một đối tượng của class User, các bạn nhé! Nếu message mà chúng ta publish vào topic users không đúng format của class User, các bạn sẽ thấy lỗi và ứng dụng stop như sau:

Mặc định thì Apache Kafka Stream sử dụng class DefaultProductionExceptionHandlerđể handle cho phần cấu hình PRODUCTION_EXCEPTION_HANDLER_CLASS_CONFIG này.

Và với lỗi này, thường ứng dụng của chúng ta sẽ không recover được, nên thường ứng dụng của chúng ta sẽ stop.

Nếu các bạn vẫn muốn ứng dụng chạy thì có thể định nghĩa một bean của class StreamsBuilderFactoryBeanConfigurer như sau các bạn nhé:

Cấu hình này catch tất cả uncaught exceptions, không chỉ cho ProductionExceptionHandler mà còn nhiều loại exception khác và replace thread bị lỗi với thread mới để ứng dụng có thể chạy tiếp đó các bạn.

Có 2 cấu hình khác liên quan đến class StreamThreadExceptionResponse là SHUTDOWN_CLIENT và SHUTDOWN_APPLICATION. SHUTDOWN_CLIENT sẽ stop Kafka Stream instance đang consume các message. Chúng ta có thể có nhiều Kafka Stream instance đang consume các message, SHUTDOWN_CLIENT sẽ stop Kafka Stream instance hiện tại đang có lỗi. SHUTDOWN_APPLICATION sẽ stop toàn bộ application.

Các bạn có thể xem đầy đủ các exception handler trong video ở đây:

Add Comment