0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Khám Phá Apache Kafka: Khái Niệm Cốt Lõi và Ứng Dụng Thực Tế

Đăng vào 2 tháng trước

• 5 phút đọc

Chủ đề:

KungFuTech

Giới Thiệu

Apache Kafka là một nền tảng xử lý dữ liệu theo kiểu stream, rất hữu ích cho các kỹ sư dữ liệu trong việc truyền tải và xử lý dữ liệu theo thời gian thực. Trong bài viết này, chúng ta sẽ đi sâu vào các khái niệm cốt lõi của Kafka, ứng dụng của nó trong kỹ thuật dữ liệu, cũng như các thực tiễn tốt nhất trong sản xuất. Nếu bạn là một lập trình viên hoặc kỹ sư dữ liệu, việc hiểu rõ Kafka sẽ giúp bạn tối ưu hóa quy trình làm việc của mình.

Nội Dung Chính

Kiến Trúc Kafka {#kientruc-kafka}

Broker

Broker là một máy chủ lưu trữ dữ liệu mà chúng ta sử dụng để truyền tải dữ liệu. Nó quản lý tất cả các yêu cầu truyền tải dữ liệu, hoạt động như một trung gian giữa producer (người gửi thông tin) và consumer (người nhận thông tin).

Zookeeper vs. KRaft (Kafka Raft Metadata mode)

Trước phiên bản Kafka 2.8, Zookeeper là một bộ điều phối bên ngoài chịu trách nhiệm xử lý metadata. Tuy nhiên, từ phiên bản 2.8, Kafka đã giới thiệu KRaft như một lựa chọn thay thế, giúp loại bỏ sự phụ thuộc vào Zookeeper, làm cho hệ thống trở nên dễ quản lý và mở rộng hơn.

Khái Niệm Topic, Partition và Offset {#topic-partition-offset}

Topic

Topic trong Kafka giống như một log lưu trữ các tin nhắn và sự kiện theo thứ tự logic. Bạn có thể hình dung topic giống như một thư mục trong hệ thống tệp.

Partition

Partition là một "mảnh" của topic. Khi bạn tạo topic, bạn cần xác định số lượng partitions cần thiết, điều này giúp nhiều broker có thể chia sẻ tải và cho phép nhiều consumer trong cùng một nhóm đọc từ các partition khác nhau cùng lúc.

Offset

Offset là một định danh duy nhất được gán cho mỗi tin nhắn trong một partition, giúp các producer, consumer và broker xác định vị trí của một tin nhắn.

Producer và Consumer {#producer-consumer}

Producer

Producer là một client viết tin nhắn vào các topic trong cluster Kafka. Bạn có thể chỉ định partition mà tin nhắn sẽ được lưu bằng cách sử dụng phân phối dựa trên key.

Consumer

Consumer là client đọc tin nhắn từ các topic trong cluster Kafka. Trong Kafka, có các nhóm consumer giúp các consumer làm việc cùng nhau một cách song song.

Chính Sách Giao Hàng Tin Nhắn {#chinh-sach-giao-hang}

Có ba loại chính sách giao hàng:

  • At-Most-Once: Người tiêu dùng chỉ lưu vị trí của sự kiện cuối cùng và xử lý nó. Nếu có sự cố xảy ra, không có cách nào để quay lại.
  • At-Least-Once: Người tiêu dùng xử lý các sự kiện đã nhận và lưu kết quả cũng như vị trí của sự kiện cuối cùng, cho phép lấy lại và xử lý lại các sự kiện cũ.
  • Exactly-Once: Tương tự như At-Least-Once nhưng loại bỏ các bản sao, đảm bảo mỗi sự kiện chỉ được xử lý một lần.

Chính Sách Giữ Lại Dữ Liệu {#chinh-sach-giu-lai}

Chính sách giữ lại xác định khoảng thời gian mà dữ liệu được giữ trong một topic. Có hai loại chính sách:

  • Giữ lại theo thời gian: Cấu hình thời gian mà các tin nhắn được giữ lại.
  • Giữ lại theo kích thước: Dữ liệu sẽ bị xóa khi kích thước vượt qua giới hạn đã cấu hình.

Serialization & Deserialization {#serialization-deserialization}

Serialization là quá trình chuyển đổi dữ liệu có cấu trúc thành dòng byte, trong khi deserialization là quá trình ngược lại. Kafka thường sử dụng các định dạng như Avro, Protobuf hoặc JSON schema.

Sao Chép và Độ Tin Cậy {#sao-chep-do-tin-cay}

Bạn có thể chỉ định hệ số sao chép khi tạo topic, cho phép tạo nhiều bản sao trên các broker khác nhau để đảm bảo tính khả dụng của dữ liệu.

Hệ số sao chép

Cấu hình cho mỗi topic xác định tổng số bản sao cho mỗi partition.

Leader và Follower

Trong mỗi partition, một replica được chỉ định là leader để xử lý tất cả các yêu cầu truyền và nhận dữ liệu. Các replica khác là followers, luôn đồng bộ hóa với leader.

ISR (In-Sync Replicas)

Tập hợp các replica follower đã sao chép thành công dữ liệu từ leader và hoàn toàn được cập nhật.

Tính khả dụng cao

Hệ thống vẫn hoạt động và dữ liệu có thể truy cập ngay cả khi một hoặc nhiều broker gặp sự cố.

Kafka Connect {#kafka-connect}

Kafka Connect là một công cụ cho phép truyền dữ liệu giữa Kafka và các hệ thống dữ liệu khác. Chúng ta sẽ tập trung vào việc truyền dữ liệu giữa hai cơ sở dữ liệu: PostgreSQL và Cassandra.

Cấu hình Connector cho Postgres

Chúng ta sẽ sử dụng Debezium Connect, dựa trên Kafka Connect. Để bắt đầu, chúng ta cần tạo một file cấu hình JSON cho Docker Compose, bao gồm các dịch vụ cần thiết như Zookeeper, Kafka, PostgreSQL, Cassandra và Kafka UI.

Tạo Bảng

  • Postgres:
sql Copy
CREATE TABLE customers (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(150),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO customers (name, email) VALUES
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com');
  • Cassandra:
sql Copy
CREATE KEYSPACE IF NOT EXISTS cdc_demo
WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};
USE cdc_demo;
CREATE TABLE customers (
    id INT PRIMARY KEY,
    name TEXT,
    email TEXT,
    created_at TIMESTAMP
);

Đăng Ký Các Connectors

Cấu hình cho PostgreSQL và Cassandra sẽ được lưu trong các file JSON và được đăng ký qua các lệnh curl.

Cách Kafka Được Sử Dụng Trong Ngành {#cach-kafka-su-dung}

Ví Dụ Thực Tế

Một ví dụ điển hình là Uber, nơi Kafka được sử dụng để xử lý hàng triệu yêu cầu và cập nhật mỗi giây. Khi một hành khách nhấn “Request Ride”, sự kiện này được phát hành vào một topic Kafka, cho phép xử lý đồng thời hàng triệu yêu cầu khác nhau, đảm bảo hiệu suất cao và độ tin cậy.

Kết Luận

Sử dụng Apache Kafka trong kỹ thuật dữ liệu giúp tối ưu hóa quy trình xử lý dữ liệu theo thời gian thực. Hi vọng bài viết này đã cung cấp cho bạn cái nhìn rõ ràng về Kafka và cách áp dụng nó trong các dự án thực tế. Hãy bắt đầu khám phá và áp dụng Kafka vào công việc của bạn ngay hôm nay!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào