NATS Stream DuplicateWindow

DuplicateWindow β€” Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Β«ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎΒ» для Π΄Π΅Π΄ΡƒΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ сообщСний Π² стримС Π½Π° основС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Nats-Msg-Id.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

  • ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΡ€ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ устанавливаСт Nats-Msg-Id (Ρ‡Π΅Ρ€Π΅Π· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈΠ»ΠΈ API ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°).
  • JetStream Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ сообщСний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ записаны, Π½Π° врСмя, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π² DuplicateWindow.
  • Если Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… этого ΠΎΠΊΠ½Π° ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π½ΠΎΠ²ΠΎΠ΅ сообщСниС с Ρ‚Π΅ΠΌ ΠΆΠ΅ Nats-Msg-Id (нСзависимо ΠΎΡ‚ subject), ΠΎΠ½ΠΎ считаСтся Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠΌ ΠΈ:
    • Π½Π΅ сохраняСтся ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π² стрим;
    • ΠΏΡ€ΠΎΠ΄ΡŽΡΠ΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ack, Ρ‡Ρ‚ΠΎ «сообщСниС принято», хотя фактичСски ΠΎΠ½ΠΎ Π½Π΅ Π±Ρ‹Π»ΠΎ записано Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π·.
  • По истСчСнии DuplicateWindow Ρ‚ΠΎΡ‚ ΠΆΠ΅ Nats-Msg-Id большС Π½Π΅ считаСтся Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠΌ ΠΈ сообщСниС Π±ΡƒΠ΄Π΅Ρ‚ записано ΠΊΠ°ΠΊ Π½ΠΎΠ²ΠΎΠ΅.

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ

  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½ΡƒΡŽ запись сообщСний ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°Ρ… ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ (retries) со стороны ΠΏΡ€ΠΎΠ΄ΡŒΡŽΡΠ΅Ρ€Π°.
  • Π—Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² ΠΏΡ€ΠΈ:
    • сСтСвых ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π°Ρ…;
    • ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… публикациях послС Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ статуса (ΠΏΡ€ΠΎΠ΄ΡŒΡŽΡΠ΅Ρ€ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ack ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅Ρ‚ Π΅Ρ‰Ρ‘ Ρ€Π°Π·).

Π§Ρ‚ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ значСния

  • Блишком малСнький DuplicateWindow:
    • Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹, ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠΈΠ΅ ΠΏΠΎΠ·ΠΆΠ΅ ΠΎΠΊΠ½Π°, всё-Ρ‚Π°ΠΊΠΈ ΠΏΠΎΠΏΠ°Π΄ΡƒΡ‚ Π² стрим.
  • Блишком большой DuplicateWindow:
    • растут Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ истории Nats-Msg-Id;
    • ΠΏΡ€ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ использовании ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя сообщСния ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Π°ΠΌΠΈ ΠΈ Π½Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ.
  • Π’ΠΈΠΏΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄:
    • Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ, сопоставимоС с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ ack ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ retry-Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ΄ΡŽΡΠ΅Ρ€Π°.