Trong bài tutorial này, chúng ta sẽ cùng tìm hiểu và viết chương trình sử dụng Akka Streams – một thư viện được Akka phát triển nhằm giải quyết các vấn đề gặp phải khi sử dụng Akka Actor trong xử lý streams (ví dụ như buffer overflow khi truyền nhận messages giữa các actor hoặc retransmitting khi messages bị thất lạc,…)

Trước hết, các bạn thêm dependency của Akka Streams vào file pom.xml như sau:

Akka Streams có 5 thành phần chính là:

– Source: được sử dụng để tạo ra một output stream duy nhất. Source nhận hai tham số đầu vào là loại dữ liệu output và các thông tin thêm như port kết nối, IP address,… Ví dụ: Source[Int, NotUsed] sẽ tạo ra dữ liệu output là Int và NotUsed được sử dụng khi người dùng không cần cung cấp thêm thông tin về nguồn dữ liệu.

– Sink: tiếp nhận và xử lý dữ liệu đầu vào là một input stream duy nhất (có thể làm chậm dữ liệu để phù hợp với tốc độ của consumer)

– Flow: nhận đầu vào là một input stream và đầu ra là một output stream (để xử lý dòng dữ liệu)

– BidiFlow: hoạt động giống hai Flows với chiều ngược nhau (2 input streams và 2 output streams)

– Graph: là tổ hợp của nhiều Flows được kết nối lại với nhau.

Trong bài tutorial này, chúng ta sẽ sử dụng Source, Sink và Flow để viết chương trình trích xuất author và hashtag của các tweets. Trước hết ta định nghĩa 3 class sau (ở đây ta sử dụng Regex [^#\\w] để tìm tất cả các ký tự đặc biệt không phải là “#” như @, &,$ và loại bỏ chúng ra khỏi hashtag. Các bạn có thể xem thêm về Regex tại bài tutorial Regular expression)

Tiếp theo ta khởi tạo môi trường để chạy Akka Stream bằng việc định nghĩa một ActorSystem và một Materializer (Materializer được dùng để định nghĩa engine cho việc chạy stream trong Akka). Ngoài ra, ta cũng tạo một output streem bằng cách sử dụng Source như sau:

Trong Akka, Streams luôn bắt đầu từ một Source[Out,M1] và thông qua các Flow[In,Out,M2] rồi kết thức bằng Sink[In,M3] (M1, M2 và M3 là các materialized types). Đoạn code sau mô tả quá trình trên với việc trích xuất tất cả hashtags từ tweets stream:

Chạy đoạn code trên ta được kết quả sau (ở đây #kafka** đã được rút gọn về hashtag #kafka nhờ việc sử dụng Regex như đã mô tả ở trên):

Tương tự, ta liệt kê các Author với hashtag #akka như sau:

Như vậy chúng ta đã hoàn thành việc viết chương trình cơ bản nhằm mô tả phương thức hoạt động của Akka Streams. Các bạn có thể tham khảo full code của chương trình dưới đây.

Tháng Một 30, 2019
ITechSeeker