1. Soalan
Strim peristiwa pesanan mengagregatkan amaun dan bilangan pesanan mengikut customerId dalam tetingkap lima minit. Jam peranti mungkin hanyut (drift), percubaan semula rangkaian menyebabkan penghantaran tidak mengikut urutan, dan sesetengah sekatan Kafka mungkin tiada mesej baharu buat sementara waktu. Keputusan harus dipaparkan dengan cepat sambil membenarkan data lewat membetulkan tetingkap untuk tempoh yang terhad. Reka bentuk pengendalian masa peristiwa ini.
2. Kekangan dan penjelasan
- Sahkan sama ada tetingkap menggunakan masa peristiwa, masa penulisan, atau masa pemprosesan; masalah ini menggunakan masa peristiwa.
- Tetapkan batas ketidakteraturan maksimum, seperti 30 saat, dan tentukan apa yang berlaku melebihi batas tersebut.
- Tentukan sama ada keputusan adalah peristiwa tambah sahaja (append-only) atau snapshot yang boleh dikemas kini; pengguna hiliran mesti mengenal pasti semakan.
- Bincangkan sekatan terbiar, cap masa tidak sah, peristiwa pendua, dan tugas main semula (replay) supaya input tanpa mesej tidak disalah anggap sebagai penamat strim.
3. Konsep teras
Masa peristiwa datang daripada rekod itu sendiri. Tera air menyatakan bahawa sistem percaya masa peristiwa telah maju ke sesuatu kedudukan. Tetingkap biasanya dicetuskan apabila tera air melepasi penghujungnya; rekod yang tiba selepas tera air tersebut dengan cap masa yang masih tergolong dalam tetingkap tersebut dianggap lewat. Apabila input selari digabungkan, pengendali biasanya menunggu tera air input minimum, jadi sekatan yang tidak aktif boleh menahan kemajuan global. Oleh itu, pengesanan terbiar atau dasar tamat masa bagi setiap sekatan diperlukan.
4. Aliran rujukan
onRecord(event):
ts = extractEventTimestamp(event)
key = canonicalKey(event.customerId)
updateWatermarkGenerator(ts)
window = floorToFiveMinutes(ts)
if ts <= currentWatermark + allowedLateness:
state[window, key] = aggregate(state[window, key], event)
emitUpsert(window, key, state[window, key], revision + 1)
else:
routeToLateData(window, key, event)
onWatermark(wm):
finalizeWindowsBefore(wm)
expireStateAfterRetention()Sumber mengekstrak cap masa peristiwa dan menjana tera air bounded-out-of-orderness. Tandakan sekatan sebagai terbiar selepas tempoh yang berpanjangan tanpa data supaya ia tidak menahan tera air yang digabungkan. Kekalkan keadaan tetingkap sepanjang tempoh kelewatan dibenarkan; kemas kini keputusan dengan upsert atau peristiwa pembetulan. Salurkan data yang melebihi tarikh akhir ke output sisi (side output) untuk semakan atau pengisian semula luar talian (backfill).
5. Pertukaran antara ketepatan dan pendaman
Kelewatan dibenarkan yang lebih lama menjadikan pandangan masa peristiwa lebih lengkap tetapi meningkatkan keadaan dan volum pembetulan. Mengeluarkan satu keputusan akhir meminimumkan pendaman hiliran tetapi tidak dapat mewakili semakan lewat. Peristiwa kemas kini yang membawa kunci tetingkap, semakan, dan sebab memerlukan gabungan idempoten di hiliran. Bagi ukuran yang tidak bertoleransi terhadap kehilangan seperti wang, kekalkan peristiwa mentah dan jadualkan pengiraan semula luar talian; untuk papan pendahulu masa nyata, mungkin memadai untuk hanya menyegarkan semula dalam kelompok seterusnya selepas tarikh akhir.
6. Pengesahan dan kebolehcerapan
- Jana peristiwa yang teratur, tidak teratur, lewat kurang daripada 30 saat, dan melepasi tarikh akhir; bandingkan setiap tetingkap dengan garis dasar luar talian.
- Suntik sekatan terbiar, lonjakan jam, peristiwa pendua, dan mula semula tugas; sahkan bahawa tera air tidak terhenti atau berundur ke belakang.
- Rekod tera air semasa, jurang masa pemprosesan berbanding masa peristiwa, saiz keadaan tetingkap, kadar peristiwa lewat, volum output sisi, dan kiraan pembetulan.
- Sertakan kunci tetingkap, semakan, dan ID peristiwa input dalam setiap kemas kini; main semula log yang sama dan bandingkan snapshot akhir.
7. Kesilapan lazim
- Menggantikan tetingkap masa peristiwa dengan tetingkap masa pemprosesan sambil mendakwa tahan terhadap ketidakteraturan rangkaian.
- Menganggap tera air sebagai penanda penyiapan mutlak; dalam praktiknya ia boleh menjadi heuristik berdasarkan andaian kelewatan.
- Mengabaikan sekatan terbiar, membiarkan sekatan senyap menyekat setiap tetingkap daripada ditutup.
- Menggugurkan data lewat tanpa output sisi, versi, atau laluan backfill luar talian.
8. Mata pemarkahan temu duga
Membezakan tiga tanggapan masa
Calon harus mentakrifkan masa peristiwa, penyerapan, dan pemprosesan serta menerangkan bagaimana pilihan tetingkap mengubah ketepatan dan pendaman.
Menjana dan menggabungkan tera air
Jawapan harus merangkumi bounded out-of-orderness, tera air minimum merentas input selari, dan pengendalian keadaan terbiar, sambil menyatakan bahawa tera air ialah anggaran kemajuan dan bukannya janji mutlak.
Mereka bentuk laluan data lewat dan pembetulan
Calon harus mentakrifkan tarikh akhir kelewatan dibenarkan, output sisi, semakan, dan gabungan idempoten hiliran untuk kedua-dua data dalam tarikh akhir dan pasca tarikh akhir.
Mengesahkan keputusan dengan main semula (replay)
Calon harus menguji ketidakteraturan, keadaan terbiar, mula semula, dan pendua terhadap garis dasar luar talian dan metrik langsung, bukannya sekadar memeriksa sama ada tugas itu kekal berjalan.