استخدام كافكا مع الخدمات المصغرة؟ على الأرجح أنك تتعامل مع عمليات إعادة الإرسال بشكل غير صحيح







أصبح Apache Kafka النظام الأساسي الرائد للاتصال غير المتزامن بين الخدمات الصغيرة. يحتوي على ميزات قوية تمكنك من إنشاء بنيات غير متزامنة تتسامح مع الأخطاء.







. , (, ) , , .







: . , , . , , , .







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 . , . , .









, . (.. ), . - , .







, , , ..







. .







(bounded context) - .







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). , :







  1. .
  2. , , .
  3. , , . . , .
  4. , ( (backoff strategy)). , , (dead letter queue, DLQ), .








retry-topic ( ) , . , , 1 , . , , . , , (dead letter queue, DLQ)







?



, . . , . , , .









: , : .







(recoverable errors) — , , , . , . , , . , .







- : , . , , . ( . «» , — — . , - — — .)







, . , . () . - , , ..







(non-recoverable errors) — , , , . , NullPointerException. - .







, , . , , , ..







, , , «» ( «» : !) , , NULLS , .







?







, . , , . , , . , , … , .







? . , (, ).







, , . , …









. Kafka. , ID .







? , .







. ? , . , , , . .







. User , . Zoey ZoZoiee. , (, 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. . , .







:










All Articles