Advanced Spring Boot 4: Event-Driven Architecture (Kafka) · Pelajaran

Pola Outbox Transaksional

Pelajari cara pola outbox transaksional menjembatani transaksi basis data dan publikasi Kafka secara andal, sehingga inkonsistensi penulisan ganda dapat dihindari di Spring Boot.

Pelajaran 4 dari 413 langkah

Pola Outbox Transaksional adalah pelajaran Advanced Spring Boot 4: Event-Driven Architecture (Kafka) gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Advanced Spring Boot 4: Event-Driven Architecture (Kafka), dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Advanced Spring Boot 4: Event-Driven Architecture (Kafka) mencakup 4 pelajaran total.

Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.

The Dual-Write Problem

A common bug: a service updates its database and publishes a Kafka event in two separate operations. If one succeeds and the other fails, the system becomes inconsistent.

The transactional outbox pattern eliminates this risk.

Core Idea

Instead of publishing directly, write the event into an outbox table within the same database transaction as your business change.

A separate process then reads the outbox and publishes to Kafka.

The Outbox Table

The outbox table stores serialized events plus metadata.

CREATE TABLE outbox (
  id UUID PRIMARY KEY,
  aggregate_type VARCHAR(255),
  aggregate_id VARCHAR(255),
  event_type VARCHAR(255),
  payload JSONB,
  created_at TIMESTAMP DEFAULT now(),
  published BOOLEAN DEFAULT false
);

Writing in One Transaction

Both the domain entity and the outbox row are saved inside one @Transactional method, so they commit or roll back together.

@Transactional
public void placeOrder(Order order) {
    orderRepository.save(order);
    outboxRepository.save(OutboxEvent.from(order));
}

Atomicity Guarantee

Because both writes share the database transaction, there is no window where the order exists without its event recorded. This is the key correctness property.

The Relay Process

A background relay polls unpublished outbox rows and sends them to Kafka, marking them published on success.

@Scheduled(fixedDelay = 500)
public void relay() {
    for (OutboxEvent e : outboxRepository.findUnpublished()) {
        kafkaTemplate.send(e.getTopic(), e.getPayload());
        e.markPublished();
    }
}

At-Least-Once Publishing

If the relay crashes after sending but before marking published, the event is sent again. Consumers must therefore be idempotent, often using the event id as a dedup key.

Change Data Capture Alternative

Instead of polling, tools like Debezium tail the database transaction log and stream outbox inserts to Kafka automatically — lower latency and no polling load.

Cleaning Up the Outbox

Periodically delete or archive published rows to keep the table small and queries fast.

DELETE FROM outbox WHERE published = true AND created_at < now() - INTERVAL '7 days';

When to Use It

Use the outbox when you must keep a database state change and an event publication consistent. It is simpler and more portable than spanning a Kafka transaction across an external database.

Putting It Together

The outbox pattern turns two unreliable writes into one atomic database commit plus a reliable relay. Combine it with idempotent consumers for end-to-end consistency.

Quick Check

Test your understanding of the outbox pattern.

Recap

You learned the transactional outbox pattern.

  • Avoids dual-write inconsistency by using one DB transaction.
  • An outbox table stores pending events.
  • A relay (polling or CDC) publishes to Kafka.
  • Consumers must be idempotent due to at-least-once delivery.
Gratis untuk memulai

Belajar Advanced Spring Boot 4: Event-Driven Architecture (Kafka) dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
12
Pelajaran
48

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pola Outbox Transaksional” gratis?

Ya — teks lengkap “Pola Outbox Transaksional” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Advanced Spring Boot 4: Event-Driven Architecture (Kafka), upgrade ke CoddyKit PRO. Kursus Advanced Spring Boot 4: Event-Driven Architecture (Kafka) mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pola Outbox Transaksional”?

Pelajari cara pola outbox transaksional menjembatani transaksi basis data dan publikasi Kafka secara andal, sehingga inkonsistensi penulisan ganda dapat dihindari di Spring Boot. Kamu berlatih Advanced Spring Boot 4: Event-Driven Architecture (Kafka) dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Advanced Spring Boot 4: Event-Driven Architecture (Kafka)?

Tidak diperlukan pengalaman sebelumnya. Advanced Spring Boot 4: Event-Driven Architecture (Kafka) di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Pola Outbox Transaksional” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Advanced Spring Boot 4: Event-Driven Architecture (Kafka) ini?

Ya. Setiap pelajaran Advanced Spring Boot 4: Event-Driven Architecture (Kafka) menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Memahami Transaksi Kafka
  2. Menerapkan Produsen Transaksional
  3. Semantik Pemrosesan Tepat Satu Kali
  4. Pola Outbox Transaksional
← Kembali ke Advanced Spring Boot 4: Event-Driven Architecture (Kafka)