Giới thiệu về Apache Kafka Connect

Apache Kafka Connect là một công cụ của Apache Kafka về data integration, giúp chúng ta có thể stream data giữa các data system khác nhau với Apache Kafka. Nó có thể giúp các bạn ingest toàn bộ data từ một database nào đó hoặc collect thông tin metrics của ứng dụng của các bạn vào một Apache Kafka topic, giúp cho những data này có thể available for streaming tới các data system khác với độ trễ thấp. Trong bài viết này, mình sẽ giới thiệu với các bạn các kiến thức cơ bản về Apache Kafka Connect để các bạn có thể sử dụng nó trong các ứng dụng của mình các bạn nhé!

Cài đặt Apache Kafka Connect

Điều đầu tiên mình cần nói với các bạn là Apache Kafka Connect đã được tích hợp, build sẵn với Apache Kafka nên một khi các bạn đã tải cài đặt Apache Kafka rồi thì không cần phải tải lại Apache Kafka Connect nữa.

Tương tự như Apache Kafka, Apache Kafka Connect cũng có một tập tin cấu hình tên là connect-distributed.properties, nằm trong thư mục config của Apache Kafka. Nếu các bạn muốn chỉnh sửa cấu hình nào đó thì có thể chỉnh sửa tập tin này nhé!

Chúng ta có thể start Apache Connect sử dụng command như sau:

Kết quả khi mình chạy command trên như sau:

Apache Kafka Connect mặc định sẽ chạy trên port 8083 và kết quả khi mình kiểm tra version của Apache Kafka Connect sử dụng URL http://localhost:8083 như sau:

Như vậy là chúng ta đã start thành công Apache Kafka Connect rồi đó các bạn!

Các khái niệm cơ bản của Apache Kafka Connect

Để làm việc với Apache Kafka Connect, các bạn cần nắm các khái niệm cơ bản như sau:

  • Connectors: Đối tượng chính làm nhiệm vụ connect và stream data giữa các data system và Apache Kafka. Chúng ta có 2 loại Connector là Source Connector và Sink Connector. Source Connector là data system emit data còn Sink Connector thì sẽ là data system nhận các data này các bạn nhé!

Các bạn có thể hình dung cách Apache Kafka Connect hoạt động theo hình vẽ sau:

  • Tasks: Được sử dụng bởi các Connector để streaming data từ và tới Apache Kafka.
  • Workers: Running processes được sử dụng bởi các Connector để thực thi các Task.
  • Converters: Code được sử dụng để translate data giữa Apache Kafka Connect và các data system
  • Transforms: Các bạn có thể thêm các logic code để filter, transform data trước khi data được gửi tới các Connector hoặc trước khi các Connector gửi data đi.
  • Dead Letter Queue: Được sử dụng trong trường hợp processing data bị lỗi.

Các Connectors sẽ được cài đặt vào Apache Kafka Connect sử dụng các Connector plugins. Mặc định thì Apache Kafka Connect hỗ trợ các Connector plugins như sau:

Các bạn có thể tải và cài đặt thêm các Connector plugins khác ở đây https://www.confluent.io/hub/.

Cài đặt Apache Kafka Connect Connector plugin

Mình sẽ hướng dẫn các bạn cách cài đặt File Chunk Source Connector, một connector giúp chúng ta có thể chia nhỏ một tập tin bất kỳ dưới dạng chunks, sau đó thì copy các chunks này vào một Apache Kafka topic. Các bạn có thể download plugin này từ trang https://www.confluent.io/hub/ như sau:

Cài đặt ở local máy của các bạn thì các bạn có thể download tập tin cài đặt ở phần “Self-Hosted” các bạn nhé!

Sau khi download và giải nén tập tin cài đặt của File Chunk Source Connector plugin, các bạn hãy tạo mới một thư mục connectors trong thư mục cài đặt của Apache Kafka rồi copy thư mục đã giải nén của File Chunk Source Connector plugin vào:

Tiếp theo, các bạn cần cấu hình thư mục connectors này là thư mục plugins của Apache Kafka Connect, bằng cách update property plugin.path trong tập tin connect-distributed.properties, của mình như sau:

Các bạn có thể thêm đường dẫn tới nhiều thư mục nếu muốn các bạn nhé!

Bây giờ thì restart lại Apache Kafka Connect rồi đi đến địa chỉ http://localhost:8083/connector-plugins, các bạn sẽ thấy kết quả như sau:

Như vậy là chúng ta đã cài đặt thành công File Chunk Source Connector plugin rồi đó các bạn!

Để xem Apache Kafka Connect hoạt động như thế nào, mình cũng sẽ cài đặt luôn File Chunk Sink Connector các bạn nhé:

File Chunk Sink Connector này có tác dụng sẽ subsbribe vào topic có chứa nội dung của các tập tin dưới dạng chunks được public bởi File Chunk Source Connector ở trên, rồi tạo lại tập tin original ở một thư mục khác.

Tiếp theo, mình sẽ tạo mới một topic trong Apache Kafka để nhận data được public bởi File Chunk Source Connector và cũng để File Chunk Sink Connector subscribe để nhận data:

Ở trên thì chúng ta chỉ mới cài đặt Connector plugins, để File Chunk Source Connector và File Chunk Sink Connector có thể làm việc, chúng ta cần install chúng vào Apache Kafka Connect.

Chúng ta sẽ submit một POST request tới địa chỉ http://localhost:8083/connectors để cài đặt một Connector với Apache Kafka Connect. Nội dung body của POST request này sẽ là cấu hình dành cho Connector đó.

Cho File Chunk Source Connector, các bạn có thể submit một POST request với nội dung cấu hình như sau:

Mình sẽ không nói chi tiết về các cấu hình trên, chỉ nói nôm na là mình đã cấu hình để cho File Chunk Source Connector này sẽ đọc nội dung của tất cả các file nằm trong thư mục /tmp/upload, split nội dung của các file này thành những chunk nhỏ và public vào topic “file-chunk-topic” đó các bạn!

Nếu các bạn muốn biết thêm chi tiết về các cấu hình trên thì có thể đọc thêm ở đây nhé!

Cho File Chunk Sink Connector, các bạn cũng có thể submit một POST request với nội dung như sau:

File Chunk Sink Connector sẽ subscribe vào topic “file-chunk-topic” để receive nội dung của tất cả các file, sau đó thì produce original file và bỏ vào một thư mục có tên là merged trong thư mục /tmp/download.

Các bạn hãy chắc chắn là các thư mục /tmp/upload và /tmp/download đã tồn tại trước khi các bạn install các Connector trên các bạn nhé! Nếu các bạn chưa tạo trước đó thì các bạn hãy restart lại Apache Kafka Connect sau khi cài đặt các Connector này!

Kiểm tra tất cả các Connectors được install trong Apache Kafka Connect lúc này, các bạn sẽ thấy kết quả tương tự như mình như sau:

Bây giờ thì copy một tập tin nào đó vào thư mục /tmp/upload rồi kiểm tra thư mục /tmp/download/merged, các bạn sẽ thấy kết quả như mình, như sau:

Như vậy là chúng ta đã copy thành công các tập tin với File Chunk Source Connector và File Chunk Sink Connector rồi đó các bạn!

Add Comment