Bosh sahifa Wiki Stream

Stream

Stream — ma’lumot elementlari vaqt davomida ketma-ket keladigan va to‘liq to‘plamni xotirada kutmasdan bosqichma-bosqich qayta ishlanadigan abstraksiyadir. File byte oqimi, TCP byte streami, QUIC streami, event stream va dasturlash tilidagi lazy sequence shu atama bilan yuritiladi. Tartib, chegara va ishonchlilik semantikasi aniq texnologiyaga bog‘liq.

Byte va message oqimi

TCP ordered reliable byte stream beradi, lekin application message chegarasini saqlamaydi. Senderning bitta write amali receiverda bir nechta readga bo‘linishi yoki bir necha write bitta readda kelishi mumkin. Protocol length prefix, delimiter yoki fixed frame bilan xabar chegarasini o‘zi belgilaydi.

Message stream esa event yoki record chegarasini saqlashi mumkin. Kafka partitionidagi recordlar offset bilan tartiblangan. WebSocket frame va message tushunchalariga ega, ammo bir message bir nechta framega bo‘linishi mumkin.

Processing modeli

Source element ishlab chiqaradi, operator map, filter, window yoki aggregate bajaradi, sink natijani saqlaydi. Pull modelida consumer keyingi elementni so‘raydi. Push modelida producer data yuboradi va backpressure alohida mexanizm talab qiladi.

Lazy stream operator natijani talab paytida hisoblaydi. Infinite streamni to‘liq listga aylantirish tugamaydi. Terminal operation count, collect yoki first kabi hisobni ishga tushiradi. Resource stream close yoki cancellation bilan yakunlanadi.

Tartib va parallelism

Bitta stream order kafolati parallel processingni cheklashi mumkin. Partitionlar orqali bir nechta ordered streamga bo‘lish throughputni oshiradi. Global order kerak bo‘lsa merge buffer va watermark kechikkan elementlarni kutadi.

Parallel map natijani input tartibida qaytarsa sekin element keyingilarni ushlab turishi mumkin. Unordered variant latencyni kamaytiradi, ammo consumer semantikasi bunga tayyor bo‘lishi kerak.

Backpressure va flow control

Producer consumerdan tez bo‘lsa buffer o‘sadi. Bounded queue producerga kutish, drop, sampling yoki disk spill orqali signal beradi. Reactive Streams demand soni bilan consumer capacityni e’lon qiladi. Network protocol window esa yuboruvchi bir vaqtda qancha data jo‘natishini cheklaydi.

Backpressure tarmoq bo‘ylab upstreamga yetmasa faqat oxirgi komponent bufferi to‘ladi. Har operatorning concurrency va queue limiti kuzatiladi. Cancellation upstream resurs va socketni ham to‘xtatishi kerak.

Nosozlik va qayta boshlash

Stream o‘rtasida xato bo‘lsa qayta ulanish qaysi nuqtadan davom etishini bilishi kerak. File offset, Kafka offset yoki event cursor checkpoint bo‘ladi. Source replayable bo‘lmasa yo‘qolgan elementni tiklab bo‘lmaydi.

At-least-once restart duplicate natija beradi. Sink idempotent yozuv, transaction yoki deduplication ishlatadi. Stateful window checkpointi source offset bilan muvofiqlashmasa natija ikki marta yoki umuman hisoblanmasligi mumkin.

Framing misoli

Length-prefixed protocolda avval fixed-width uzunlik, so‘ng aynan shu miqdordagi payload o‘qiladi. Parser header qisman kelishi va bir bufferda bir nechta frame bo‘lishini hisobga oladi. E’lon qilingan ulkan uzunlik memory allocation hujumiga aylanmasligi uchun maksimal frame limiti mavjud.

Delimiter-based oqimda delimiter payload ichida uchrasa escaping yoki encoding kerak. UTF-8 belgisi read chegarasida bo‘linishi mumkin; decoder incomplete byte sequence ni keyingi chunkgacha saqlaydi. Byte chunk application character chegarasi emas.

Decoder stream tugaganda qolgan noto‘liq ketma-ketlikni xato sifatida bildiradi.

Bog‘liq tushunchalar

Data stream, Byte stream, Event stream, Backpressure, Flow control, Stream processing, Offset