Trong bài tutorial Tích hợp Kafka với Spark sử dụng Dstream, chúng ta đã tìm hiểu cách thức tích hợp Kafka với Spark sử dụng một API cũ của Spark là Spark Streaming (DStream). 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 sử dụng API mới của Spark là Structured Streaming (xem thêm tại bài tutorial về Structured Streamming).

Trước hết chúng ta thêm dependency sau vào file pom.xml.

Tiếp theo ta tạo một Java class với tên KafkaSparkUsingStructuredStreaming và tạo một phiên làm việc của Spark trong hàm main như sau (xem thêm tại các bài tutorial về Spark và về cơ bản syntax của ngôn ngữ Scala cũng tương tư như Java)

Tiếp theo ta cấu hình để Spark có thể lấy dữ liệu về từ topic ‘test’ của Kafka như sau (các bạn tham khảo thêm các tùy chọn thuộc tính tại đây . Lưu ý: khác với Scala API, chúng ta phải sử dụng Dataset<Row> để biểu thị cho một DataFrame trong Java API)

Sau khi nhận được dữ liệu, ta tiến hành in kết quả ra màn hình để quan sát dữ liệu nhận về với dòng lệnh sau (xem thêm tại bài tutorial về WordCount sử dụng Structured Streaming)

Khi ta chạy thử dòng lện trên ta được kết quả

Như vậy dữ liệu trả về là một DataFrame với 7 cột (key, value, topic, partition, offset, timestamp, timestampType) trong đó cột value chính là gía trị của dữ liệu ở dạng ASCII.

Để chuyển dữ liệu ở dạng ASCII thành chuỗi String, ta có thể sử dụng dòng lệnh sau để tạo ra một DataFrame chỉ chứa giá trị của dữ liệu (cột value) ở dạng String mà không chứa thông tin của 6 cột còn lại.

Tiếp theo ta thực hiện đếm số lần xuất hiện của từng từ trong dữ liệu nhận và in kết quả ra mà hình tương tự như bài tutorial về WordCount sử dụng Structured Streaming.

Cuối cùng ta tiến hành chạy chương trình trên và mở một cửa sổ Terminal để giả lập dữ liệu đầu vào cho topic ‘test’. Ta thu được kết quả sau

Như vậy ta đã hoàn thành việc viết chương trình tích hợp Kafka với Spark sử dụng Structured Streaming. Việc sử dụng API mới, làm việc trên DataFrame và Dataset giúp cho đoạn code của chúng ta trở nên ngắn gọn, dễ hiểu hơn đồng thời giúp tăng hiệu quả xử lý của cả hệ thống. 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 12, 2018
ITechSeeker