Cập nhật kiến thức Kafka cơ bản cho các bạn mới bắt đầu. Bài viết này sẽ hướng dẫn bạn cách sử dụng Kafka với Confluent & Go. Lưu lại ngay nhé!
Apache Kafka (gọi tắt là Kafka) là một nền tảng phân phối sự kiện phân tán mã nguồn mở được phát triển bởi Apache Software Foundation và được viết bằng Java và Scala.
Kafka được tạo ra để giải quyết những thách thức trong việc xử lý lượng dữ liệu khổng lồ trong thời gian thực (real-time), cho phép các ứng dụng xuất bản (publish), đăng ký (subscribe), lưu trữ (store) và xử lý (process) các luồng bản ghi (streaming event) một cách hiệu quả.
Đọc thêm: Kafka là gì? Các thành phần trong Apache Kafka
Với sự ra đời của Confluent Cloud, các nhà phát triển có thể tận dụng Kafka mà không phải đối mặt với sự phức tạp của việc quản lý cơ sở hạ tầng. Confluent Cloud cung cấp dịch vụ Kafka được tự chủ quản lý với các tính năng như tự động mở rộng quy mô, lưu giữ dữ liệu và tích hợp liền mạch với các thành phần khác của Confluent Platform.
Trong bài này, chúng ta sẽ khám phá cách sử dụng Kafka với Confluent Cloud và Go. 200Lab sẽ hướng dẫn từ việc tạo tài khoản Confluent Cloud, thiết lập Kafka Cluster đến khởi tạo clients (producers và consumers) trong Go để gửi và đọc tin nhắn từ Kafka.
Ngoài giải pháp có sẵn của Confluent, bạn có thể tự host Kafka Cluster bằng Docker.
Toàn bộ source code của bài nằm ở repo Github kafka-demo.
Yêu cầu kỹ thuật khi sử dụng Kafka với Confluent và Go
Sau đây là những công nghệ bạn cần phải cài đặt nếu muốn sử dụng Kafka với Confluent và Go!
1. Confluent
1.1. Confluent Cloud (CCloud)
Confluent Cloud (gọi tắt là CCloud) là một dịch vụ truyền dữ liệu linh hoạt, có thể mở rộng, dựa trên Apache Kafka và được phân phối dưới dạng dịch vụ tự chủ quản lý.
Bạn cần phải đăng ký tài khoản Confluent Cloud thông qua giao diện web gọi là Confluent Cloud Console. Sau khi đăng ký thành công, bạn sẽ được tặng $400 đô dùng thử trong vòng 1 tháng.
Confluent cung cấp 3 cách để tương tác với Confluent Cloud:
- Confluet CLI (giao diện dòng lệnh)
- Confluent Cloud Console (giao diện web)
- Confluent Cloud APIs (sử dụng APIs)
Đọc thêm: Tài liệu hướng dẫn sử dụng Confluent Cloud của Confluent
1.2. Confluent CLI (không bắt buộc)
Confluent CLI (Command-line Interface) là giao diện dòng lệnh của Confluent, cho phép các nhà phát triển quản lý Confluent Cloud và Confluent Platform.
Để cài đặt và sử dụng các lệnh cơ bản trong Confluent CLI, xin bạn vui lòng đọc bài Hướng dẫn cài đặt và sử dụng Confluent CLI.
2. Go
Chúng ta sẽ dùng ngôn ngữ Go phiên bản mới nhất (1.20) để tạo producers và subscribers (gọi chung là clients) cho Kafka cluster. Bạn có thể cài đặt Go dễ dàng thông qua hướng dẫn cài đặt trên trang chủ của Go.
Đọc thêm: Golang là gì? Backend Developer có nên học Golang
Kafka cơ bản: Cách sử dụng Kafka với Confluent & Go
Bước 1: Tạo topic bên trong Kafka Cluster
Ở mục viết về Confluent phía trên, 200Lab đã liệt kê ra 3 cách để tương tác với Confluent Cloud. Trong phạm vi bài viết, 200Lab chỉ hướng dẫn 2 cách phổ biến là:
- Dùng Confluent CLI (giao diện dòng lệnh)
- Dùng Confluent Cloud Console (giao diện web)
Cách 1: Dùng Confluent CLI
1. Tạo cluster
Bỏ qua bước này nếu bạn đã có sẵn một cluster.
Ví dụ
2. Tạo topic bên trong cluster vừa tạo ở bước 1
cluster ID
lấy từ output sau khi tạo cluster của bước 2.
Ví dụ
Nếu bạn đã có sẵn cluster, chạy câu lệnh sau để lấy thông tin (bao gồm ID) của tất cả cluster.
3. Tạo API key cho cluster
API key dùng để xác thực kết nối giữa clients với cluster.
Cách 2: Dùng Cloud Console
1. Tạo cluster
Có nhiều lựa chọn để tạo cluster tương ứng với các cấu hình khác nhau. Ở phạm vi demo của bài này, chúng ta sẽ chọn cluster Basic.
2. Tạo topic bên trong cluster vừa tạo ở bước 1
Từ menu điều hướng, click vào Topics, sau đó click vào nút Add Topic.
Hiện tại, Confluent Cloud không giới hạn số partitions của topic, giá trị mặc định là 6.
Việc lựa chọn số partition phụ thuộc vào nhiều yếu tố như:
- Resource overhead (Chi phí tài nguyên): Mỗi partitions yêu cầu một số tài nguyên hệ thống về bộ nhớ và xử lý tệp. Số lượng partitions rất cao có thể chiếm dụng tài nguyên của brokers.
- Latency (Độ trễ): Số lượng partitions cao có thể dẫn tới tăng thời gian xử lý gây ra bởi chi phí quản lý và điều phối số lượng lớn partitions.
- ZooKeeper load (Mức tải của ZooKeeper): ZooKeeper dùng để quản lý metadata của Kafka. Nếu partitions tăng số lượng lớn thì ZooKeeper phải quan lý nhiều metadata hơn dẫn tới mức tải của ZooKeeper sẽ tăng theo.
- Throughput (Thông lượng): Tăng partitions giúp tăng thông lượng do nhiều consumers cùng đọc đồng thời từ nhiều partitions khác nhau.
- Scalability (Độ mở rộng): Số parttions tăng sẽ giúp việc xử lý events tốt hơn giữa các brokers.
3. Tạo API key cho cluster
Từ menu điều hướng, click vào API Keys, sau đó click vào nút Add Key. Sau đó, điền mô tả cho key (nếu cần) và tải xuống file chứa key và secret.
Bước 2: Setup producer
Confluent cung cấp sẵn một thư viện confluent-kafka-go
để giúp clients kết nối với Confluent Cloud thông qua ngôn ngữ Go. Ngoài ra, bạn có thể xem code mẫu cho nhiều trường hợp khác nhau ở folder /sample
.
Trong bài, 200Lab sẽ khởi tạo một project Go có cấu trúc như sau:
Mở terminal, khởi tạo dự án Go chứa clients code.
Tạo file producer.go
trong folder kafka-using-confluent
để gửi message tới Kafka.
Message của chúng ta có dạng JSON như sau:
Nội dung file producer.go
như sau:
Chúng ta sẽ cần chạy 2 terminal. Terminal 1 cho producer tạo message tới Kafka. Terminal 2 cho consumer đọc message từ Kafka.
Chạy dòng lệnh sau trên terminal 1, truyền vào các tham số cần thiết để tạo producer và gửi message tới Kafka.
Trong câu lệnh trên, ta có các tham số cần thiết là:
bootstrap-servers
: danh sách các brokers mà clients sẽ tương tác với. Ví dụ,host1:port1,host2:port2
.cluster-api-key
: API key của cluster.cluster-api-secret
: API secret của cluster.topic
: topic mà producer sẽ gửi message tới.schema-registry-url
: API endpoint để các ứng dựng tương tác với Schema Registry.
Một event mới tạo ra sẽ trông như sau ở Confluent Console:
Bước 3: Setup consumer
- Tạo file
consumer.go
trong folderkafka-using-confluent
. File này dùng để tạo consumer để đọc message từ Kafka và hiển thị ra console.
Mở terminal 2, chạy dòng lệnh sau để tạo consumer đọc message từ Kafka.
Trong câu lệnh trên, ta có các tham số cần thiết là:
bootstrap-servers
: danh sách các brokers mà clients sẽ tương tác với. Ví dụ,host1:port1,host2:port2
.cluster-api-key
: API key của clustercluster-api-secret
: API secret của clusterconsumer-group-id
: ID của consumer grouptopic-1
,topic-2
,topic-N
: consumers subscribe tới nhiều topic 1, 2, ..., N.
Tổng kết
Trong bài viết, chúng ta đã cùng nhau thiết lập Kafka trên Confluent Cloud, khởi tạo clients bằng ngôn ngữ Go để gửi và nhận messages. Hi vọng bài viết sẽ giúp bạn trang bị kiến thức cơ bản về cách sử dụng Kafka trong Confluent Cloud và Go.
(*) Bài viết này có tham khảo thông tin ở Confluent & Tổng quan về Schema Registry.
Vậy là giờ đây, bạn đã có được những kiến thức bổ ích về Kafka cơ bản cũng nhưng cách sử dụng Kafka với Confluent & Go. Học vấn là chặng hành trình dành đòi hỏi nhiều kiên nhẫn. Hãy đọc thêm các bài viết mới trên Trang Blog Công Nghệ & Lập Trình của 200Lab nhé.
Một vài bài viết liên quan có thể bạn sẽ thích:
Kafka là gì? Các thành phần trong Kafka
Redux là gì? Tìm hiểu Redux cơ bản cho người mới bắt đầu
Quản lý Schema và Avro Serialization trong hệ thống Apache Kafka
Blockchain là gì? Ưu & nhược điểm của các ứng dụng Blockchain
Flutter cơ bản: Điều cần biết khi lập trình ứng dụng đầu tiên
Bài viết liên quan
Giới thiệu Kiến trúc Backend for Frontend (BFF)
Nov 16, 2024 • 10 min read
Flask là gì? Hướng dẫn tạo Ứng dụng Web với Flask
Nov 15, 2024 • 7 min read
Webhook là gì? So sánh Webhook và API
Nov 15, 2024 • 8 min read
Spring Boot là gì? Hướng dẫn Khởi tạo Project Spring Boot với Docker
Nov 14, 2024 • 6 min read
Two-Factor Authentication (2FA) là gì? Vì sao chỉ Mật khẩu thôi là chưa đủ?
Nov 13, 2024 • 7 min read
Test-Driven Development (TDD) là gì? Hướng dẫn thực hành TDD
Nov 13, 2024 • 6 min read