Ph?n 1: Message-driven programming v?i Message broker và Apache Kafka
Chúng ta s? cùng tìm hi?u Kafka qua m?t ví d?:
Trong m?t gi?i ??u bóng ?á nh? AFF Cup, do Liên ?oàn Bóng ?á ??ng Nam á t? ch?c v?i s? tham gia c?a 12 ??i bóng trong khu v?c, AFF ?? phát tri?n m?t ?ng d?ng giúp khán gi? c?p nh?t tr?c ti?p di?n bi?n c?a các tr?n ??u. Gi? s?, t?t c? 12 ??i bóng ??u thi ??u cùng m?t th?i ?i?m.
Nh?ng h?y t??ng t??ng c?nh này: t?t c? 12 ??i cùng ra san, bóng bay t? tung, khán gi? thì mu?n bi?t m?i th? ngay l?p t?c. Và th? là, ?ng d?ng c?p nh?t l?i, th?ng báo nh?y lo?n x?: "Ti?n Linh ghi bàn!", "?a, Ti?n Linh ?? vào san ?au!" M?t m? h?n ??n khi?n ta ch? bi?t... c??i tr?...
?? kh?c ph?c v?n ?? này, qu?n tr? h? th?ng ?? quy?t ??nh tri?n khai m?t h? th?ng qu?n ly d?ng distributed messaging system n?m gi?a h? th?ng và các khách hàng – và ?ó chính là Apache Kafka.
Apache Kafka s? s? d?ng c? ch? truy?n nh?n tin nh?n v?i Producer ch?u trách nhi?m g?i tin nh?n vào trong hàng ??i (queue). Tin nh?n trong queue s? ???c l?y ra và ??c b?i Consumer.
T?i ?ay thì có v? ?n r?i vì khách hàng s? kh?ng s? b? nh? m?t th?ng tin nào t? các tr?n ??u n?a.
Nh?ng r?i b?t ng? x?y ra, nhà ?ài quy?t ??nh "ch?i l?n" b?ng cách c?p nh?t thêm 1000 tr?n ??u khác trên toàn th? gi?i. Lúc này, máy ch? l?u tr? tin nh?n (Broker) b? ép "gánh team", làm vi?c c?t l?c ??n m?c h? th?ng ??ng tr??c nguy c? quá t?i và s?p hoàn toàn.
Nên gi?i pháp ???c ??a ra ?? gi?i quy?t v?n ?? này là Kafka s? chia các message vào các partition, gi?ng nh? chia vi?c n?ng thành nhi?u ph?n nh? ?? x? ly d? dàng h?n.
?i?u này giúp phan t?i cho h? th?ng, t?ng kh? n?ng m? r?ng và ??m b?o vi?c x? ly d? li?u ???c hi?u qu? h?n.
Chà, m?t v?n ?? m?i l?i xu?t hi?n: th? t? các s? ki?n nh?n t? Producer b? xáo tr?n nh? m? bòng bong. H?u qu?? Consumer có th? nh?n nh?m th?ng tin. Ví d? nh? vi?c Ti?n Linh ghi bàn tr??c khi… vào san! Nghe mà b?i r?i nh? phim hài v?y.
?? kh?c ph?c v?n ?? này, ta s? chia các tr?n ??u thành các partition c? th?:
Consumer s? l?y th?ng tin t? Partition theo th? t? th?i gian, ??m b?o các s? ki?n ???c x? ly ?úng trình t?.
Sau m?t th?i gian v?n hành, h? th?ng g?p v?n ?? khi s? l??ng Consumer kh?ng ?? ?? x? ly d? li?u liên t?c t? các queue.
Vì v?y chúng ta l?i ti?p t?c m? r?ng thêm nhi?u Consumer khác ?? cùng x? ly
Lúc này, h? th?ng g?p v?n ?? khi m?t s? ki?n b? nhi?u Consumer x? ly, d?n ??n trùng l?p d? li?u, gay l?ng phí tài nguyên l?u tr? và x? ly.
T? ?ó m?t thu?t ng? trong Kafka ???c ra ??i g?i là Consumer Group v?i c? ch? qu?n ly nhóm các Consumer l?i và ??m b?o 1 partition s? ch? ???c x? ly b?i 1 l?n b?i 1 Consumer trong group.
T??ng nh? m?i chuy?n ?? ?n, nh?ng AFF l?i khi?n m?i th? thú v? h?n khi mu?n khách hàng kh?ng ch? theo d?i bóng ?á mà còn c?p nh?t các b? m?n khác, ch?ng h?n nh? c?u l?ng.
Và h? th?ng m?i ???c hình thành ?? ?áp ?ng nhu c?u c?a AFF.
H? th?ng m?i thì v?n ?? c?ng m?i th?i. Khách hàng ?ang h?ng h?c khí th? theo d?i tr?n bóng ?á l?i b?t ng? nh?n ???c th?ng báo t? m?t tr?n c?u l?ng xa l?, khi?n c?m xúc t?t d?c kh?ng phanh.
"?? gi?i quy?t v?n ?? này, chúng ta c?n chia nh? các partition h?n n?a d?a trên các topic phù h?p, mà trong tr??ng h?p này chính là t?ng b? m?n. Ví d?, chúng ta có th? chia nh? sau:"
Trong h? th?ng này, m?i b? m?n th? thao s? ???c chia thành các topic riêng bi?t. Bên trong m?i topic, các s? ki?n (event) s? ???c s?p x?p theo th? t? th?i gian trong t?ng gi?i ??u (partition) m?t cách r? ràng. ?i?u này giúp các Consumer có th? tùy y l?y th?ng tin ?úng v?i nhu c?u c?a mình, ch? c?n subscribe vào ?úng topic là m?i th? n?m trong t?m ki?m soát!
Phan 1 k?t thúc ? ?ay, Ph?n 2 s? nói v? cách mà Kafka ho?t ??ng.
Java Backend | SAP Developer
1 个月Cám ?n anh, em ?? r?t b?i r?i gi?a broker, partition, topic. Ví d? tr?c quan và d? hi?u quá ? ??.