Trong bài tutorial này, chúng ta sẽ cùng tìm hiểu cách thức tích hợp Kafka với Spark và viết một chương trình sử dụng Spark để lấy dữ liệu từ một Kafka topic rồi tiến hành một số thao tác cơ bản để xử lý dữ liệu đó. Thông thường có 2 cách để tích hợp Kafka với Spark là sử dụng DStream (API cũ của Spark) hoặc sử dụng Structured Streaming (API mới, xem thêm tại bài tutorial về Structured Streaming). Trong bài tutorial này, chúng ta sẽ cùng tìm hiểu cách thức tích hợp thứ nhất sử dụng DStream còn cách thức tích hợp sử dụng Structured Streaming sẽ được nghiên cứu trong bài tutorial tiếp theo (Tích hợp Kafka với Spark sử dụng Structured Streaming).

Trước hết, để có thể tích hợp Kafka và Spark ta cần phải thêm dependency sau vào file pom.xml ( Ở đây jason-databind dependency được thêm vào để tránh lỗi “jackson.databind.JsonMappingException: Incompatible Jackson version: 2.9.6” khi chạy chương trình sau này).

Tiếp theo, ta tạo một Java class với tên KafkaSpark và tạo một Streaming Context với batch interval là 10 giây như sau:

Ta thiết lập các thông số của Kafka như sau (các bạn có thế tham khảo thêm các thông số này tại phần Consumer Configs trên trang chủ của Kafka)

Tiếp theo ta tạo một DStream (Discretized Stream) nhằm lấy dữ liệu từ Kafka topic (ở đây là topic ‘test’):

Sau khi lấy được dữ liệu, ta sử dụng các hàm của Spark để xử lý thông tin như đã hướng dẫn trong các bài tutorials về Spark. Ở đây chúng ta sẽ sử dụng Lambda expression để đếm các từ trong dữ liệu nhận về như sau:

Lưu ý: trong trường hợp IntelliJ báo lỗi “lambda expression is not supported at language level 5”, các bạn cần phải chỉnh lại language level của chương trình bằng cách nhấn chuột phải vào tên project, chọn Open Module Settings. Trong phần Language level bạn chọn level 8 để hỗ trợ lambda expression rồi nhấn OK.

Ta tiến hành chạy thử chương trình trên (nếu báo lỗi, các bạn cần xóa bỏ <scope>provided</scope> của spark-streaming trong file pom.xml) . Sau đó mở một cửa sổ terminal và chạy một Producer để giả lập dữ liệu truyền về topic ‘test’.

Kết quả trên IntelliJ cho thấy, cứ sau 10 giây (10000 ms) chương trình tiến hành thu thập, xử lý và trả về kết của là số lần xuất hiện của từng từ trong đoạn dữ liệu nhận về.

Như vậy ta đã hoàn thành việc viết một chương trình tích hợp Kafka và Spark. Các bạn có thể tham khảo full code của chương trình dưới đây.

Tháng Mười Hai 11, 2018
ITechSeeker