
Apache Kafka telah menjadi platform terkemuka untuk komunikasi asinkron antar layanan mikro. Ia memiliki fitur-fitur canggih yang memungkinkan Anda membangun arsitektur asinkron yang toleran terhadap kesalahan dan kesalahan.
. , (, ) , , .
: . , , . , , , .
Kafka
, , Kafka. , Kafka , . .
,
Kafka โ . Kafka :
(event log), .
(producers, publishers), .
(consumers), .

, RabbitMQ, Kafka , (.. Kafka pull, push ). (offset), ( ) . .
(topics), , . , , , :
- , .
- , .
(partitions). . Kafka (partition key). โ ( , , ), .

UUID . (, UUID ), - .
, , , .
, . Kafka .
Kafka
Kafka . , . , .
, . (.. ), . - , .
, , , ..

, : ( ) . , : , .
(cross-boundary event publishing).
, (aggregates). โ , . ยซยป , , .
UserAccount. , , User ( ID: , , ..). , (EmailAddress, PhoneNumber ..). , ID ID.
UserAccount , (JSON Avro, ) UserAccount. , ID . UserAccount .
, ?
Kafka , . . , , , : .

?
, , . , โฆ , - .
, . , . : ?
(retry)?
, (.. ), . , ?
, . . , .
, ?
. , โ โ, UserAccount, . (, HTTP 400) .
, . , -, . , .
, . , . , , , .
, , .
?
. , , , , . : , .
Retry topic:
, , (retry topic). , :
- .
- , , .
- , , . . , .
- , ( (backoff strategy)). , , (dead letter queue, DLQ), .

retry-topic ( ) , . , , 1 , . , , . , , (dead letter queue, DLQ)
?
, . . , . , , .
: , : .
(recoverable errors) โ , , , . , . , , . , .
- : , . , , . ( . ยซยป , โ โ . , - โ โ .)
, . , . () . - , , ..
(non-recoverable errors) โ , , , . , NullPointerException. - .
, , . , , , ..
, , , ยซยป ( ยซยป : !) , , NULLS , .
?
, . , , . , , . , , โฆ , .
? . , (, ).
, , . , โฆ
. Kafka. , ID .
? , .
. ? , . , , , . .
. User , . Zoey Zoโฆ Zoiee. , (, Login) Zoiee, Zo.
Login User. , Zoiee : ยซ , Zo!ยป
retry topic. . , Zo, , . , Zoiee, , Zo.
Zoiee/Zo . . , . , - , . , , , .
retry topic ?
, . , , . , , โ . :
- , - .
- , ( , .
- , .
.
. . . โ , .. โ .
. . , . , , . , , .
, 100% , :
- , , ,
- , .
?
, , , ?
, , , . , .
, . , , .
, :
void processMessage(KafkaMessage km) { try { Message m = km.getMessage(); transformAndSave(m); } catch (Throwable t) { if (isRecoverable(t)) { // ... } else { // ... } } }
- Java isRecoverable()
(whitelist approach) , t . , t, (, SQL REsT), true, . , false. .
, . , SQLException () (). , , , , stash topic ( -), โฆ , .
, . , . , .
, .
. . -Java - :
void processMessage(KafkaMessage km) { try { Message m = km.getMessage(); transformAndSave(m); } catch (Throwable t) { if (isRecoverable(t)) { doWithRetry(m, Backoff.EXPONENTIAL, this::transformAndSave); } else { // ... } } }
(, , , , ).
,
, , , , , . ? . n , DLQ. ?
, - , . DLQ, . .
, . User/Login. Login , Zo. , . Zoiee .

Zo , Zoiee . .
, , . Zo , .

Zo, . User Zoiee, Login Zo.
, . Zo Login Zoiee, . , .
ID , , ID. , โฆ .
, (: , !). . , -. . , ( , ), .
, , . , :
- , ;
- , .
, , -.
?
. , . , .
, ( โ โ) . , .
, , . . Kafka, . , โ , โ , .
, , , .
, . , , :
- , Kafka , .
- .
- , .
- Kafka , . ? . , ? .
- , .
:
, Apache Kafka, Stripe. . , .
:
- https://dzone.com/articles/creating-apache-kafka-topics-dynamically-as-part-o
- https://quarkus.io/blog/kafka-failure-strategy/
- https://eng.uber.com/reliable-reprocessing/
- https://jaceklaskowski.gitbooks.io/apache-kafka/content/kafka-topics.html
- https://www.red-gate.com/simple-talk/sql/bi/reconciling-data-across-systems-using-reconciliation-hub/