Wayfair'daki bir projede, etkinlik akışlarından gelen verileri işleyen ve günlük iş raporları üreten bir sistemde karşılaşılan zorluklar, dağıtık sistemlerde hata yönetiminin önemini bir kez daha ortaya koymuştur. Kafka tüketicileri olayları dinleyip, ek verilerle zenginleştirip CloudSQL PostgreSQL'e kaydederken, API kesintileri, tüketici çökmeleri veya hatalı olay verileri gibi durumlar iş akışını aksatabiliyordu. Bu tür başarısızlık senaryolarını ele almak için bir Dead Letter Queue (DLQ) ihtiyacı doğmuştur.
Başlangıçta Kafka'nın DLQ olarak kullanılması düşünülse de, bu yaklaşım başarısız olayları sorgulama, hata nedenine göre filtreleme veya belirli bir alt kümeyi yeniden işleme gibi konularda yetersiz kalmıştır. Kafka, veri taşımada mükemmel olsa da, DLQ'deki mesajların incelenmesi ve yönetimi için ek araçlar ve özel tüketiciler gerektiriyordu. İş açısından kritik günlük raporlar üreten bir sistem için bu görünürlük eksikliği ciddi bir dezavantajdı.
Bu noktada, mevcut altyapının bir parçası olan PostgreSQL'in DLQ olarak kullanılmasına karar verildi. Başarısız olaylar ayrı bir Kafka konusuna gönderilmek yerine doğrudan PostgreSQL'deki bir DLQ tablosuna kaydedildi. Bu yaklaşım, ham olay yükünü ve hata bağlamını saklayarak, olayların durumunu (PENDING, SUCCEEDED) basit bir şekilde yönetmeyi sağladı. PostgreSQL'i DLQ olarak kullanmak, operasyonel karmaşıklığı artırmadan, başarısız olayların daha kolay denetlenmesini, sorgulanmasını ve yeniden işlenmesini mümkün kılarak sistemin dayanıklılığını önemli ölçüde artırdı.
Dağıtık sistemlerde hata yönetimini basitleştirmek ve operasyonel görünürlüğü artırmak için mevcut bir veritabanını Dead Letter Queue olarak kullanmak etkili bir stratejidir.