Hướng dẫn này khám phá Apache Kafka và khả năng xử lý luồng dữ liệu của nó. Nguồn dữ liệu được cung cấp bởi các ứng dụng sử dụng thư viện Kafka. Các ứng dụng này đẩy dữ liệu đến Kafka, nơi tuần tự hóa và lưu trữ dữ liệu. Sau đó, Kafka cung cấp dữ liệu đã ghi nhật ký cho các ứng dụng khác được viết bằng nhiều ngôn ngữ khác nhau.

Apache Kafka là gì?

Apache Kafka là hệ thống điều phối bus nhắn tin có khả năng mở rộng cao dựa trên nền tảng nhật ký cam kết. Nó xây dựng một tập dữ liệu hệ thống ghi nhật ký chỉ gắn thẻ tuần tự, trong đó các đầu vào được tách khỏi đầu ra. Kho dữ liệu được xử lý bằng Kafka chứa các thông điệp được ghi nhật ký tuần tự và được tuần tự hóa.

Kafka có thể lấy nhiều nguồn dữ liệu đồng thời, phân vùng và sắp xếp các thông điệp, sau đó cung cấp chúng cho người dùng. Nó tách nguồn thông điệp khỏi người nhận, cho phép các dịch vụ vi mô vừa là nhà xuất bản vừa là người dùng. Các ứng dụng tách biệt này có thể đến từ nhiều nguồn, ngôn ngữ lập trình, trường hợp logic kinh doanh và ngữ cảnh.

API của Kafka được phân phối dưới dạng Tệp lưu trữ Java (JAR) hoặc thư viện gắn Kafka vào ứng dụng. Ứng dụng xử lý dữ liệu và gọi thư viện để đẩy thông tin đến hoặc truy xuất dữ liệu từ Kafka. Nó được xây dựng để có tốc độ và quy mô, vì vậy rất ít quá trình xử lý diễn ra bên trong Kafka. Điều này cho phép nhiều ứng dụng khác nhau giao tiếp với một kho dữ liệu tuần tự hóa. Một ứng dụng có thể đóng nhiều vai trò như máy khách, với Kafka là máy chủ.

Trong mô hình ứng dụng này, người dùng có thể đóng vai trò kép là nhà sản xuất tiếp theo, công bố kết quả đã xử lý của họ cho những người đăng ký khác trong mô hình pub/sub. Các tin nhắn do người dùng truy xuất được xử lý và trở thành chủ đề đầu vào mới do Kafka tạo ra cho một người dùng tin nhắn khác. Điều này cho phép Kafka trở thành người giữ nhật ký bất biến của nhiều loại dữ liệu cho nhiều tác vụ xử lý dữ liệu kinh doanh khác nhau trong suốt chu kỳ giao dịch.

Kafka được thiết kế cho tốc độ, quy mô và cơ sở hạ tầng phân tán đáng tin cậy. Nó rất phù hợp cho các khuôn khổ được xây dựng cho Dữ liệu lớn, giao dịch đa đối tác phức tạp, tích lũy & xử lý nhật ký và các hệ thống theo dõi giao dịch truyền thống.

Để biết thêm thông tin, hãy xem Giới thiệu về Apache Kafka .

Mô hình Pub/Sub của Kafka và thuật ngữ

Kafka sử dụng mô hình kiến ​​trúc được gọi là Publisher-Subscriber (pub/sub). Trong mô hình này, một khuôn khổ được thiết lập giữa các ứng dụng publisher, cung cấp thông tin sự kiện và các ứng dụng subscriber, sử dụng dữ liệu đã ghi nhật ký từ các nhà cung cấp này.

Trong mô hình pub/sub, Kafka gọi các phiên bản máy chủ ứng dụng của mình là broker . Thường chỉ có một broker dẫn đầu . Tuy nhiên, việc lưu trữ dữ liệu chủ đề trên nhiều broker để phục hồi, dự phòng, bản địa hóa dữ liệu hoặc các yêu cầu xử lý khác là điều phổ biến. Các bản sao dữ liệu này được gọi là phân vùng .

Kafka nhận được các thông điệp được gọi là sự kiện , được ghi lại và lưu trữ tuần tự dưới dạng chủ đề . Các ứng dụng người dùng truy xuất các thông điệp này hoặc sự kiện bằng cách thăm dò Kafka trong các chủ đề cụ thể. Chúng được tuần tự hóa sau khi Kafka nhận được. Các ứng dụng nhà xuất bản đẩy các thông điệp trong chủ đề đến các phiên bản Kafka. Sau đó, Kafka xử lý việc phân phối các thông điệp dưới dạng kho lưu trữ nhật ký được các ứng dụng người dùng truy cập.

Các thành phần cốt lõi của Kafka là các bản ghi của nó. Các thành phần kiểm tra trạng thái và tính hợp lệ được duy trì bởi một ứng dụng phối hợp có tên là Zookeeper . Các ứng dụng sản xuất và tiêu dùng để ghi dữ liệu được phát triển và triển khai độc lập với Kafka. Các ứng dụng này có thể được viết bằng bất kỳ ngôn ngữ lập trình nào để sử dụng các API và thư viện của Kafka.

Khái niệm Kafka

Các ứng dụng producer và consumer truy cập Kafka theo mô hình client/server. Ở đây, các ứng dụng producer và consumer là các client, trong khi kho lưu trữ log của Kafka chứa các chủ đề và sự kiện hoạt động như server.

Producer gửi sự kiện đến các chủ đề, được gọi là luồng , tương tự như cập nhật hàng trong môi trường cơ sở dữ liệu SQL. Các thông báo được gửi đến Kafka bởi các ứng dụng producer tuân theo định dạng của chủ đề. Các chủ đề có thể có nhiều định dạng khác nhau, nhưng chúng vẫn nhất quán trên các phân vùng khi Kafka cập nhật các phân vùng phụ.

Ví dụ bao gồm dữ liệu cảm biến, dữ liệu thị trường chứng khoán, dữ liệu GPS, giao dịch tài chính, hàng tồn kho và các nguồn dữ liệu phát trực tiếp tương tự. Thay vì được thăm dò định kỳ để cập nhật, các bản ghi này liên tục được gửi đến Kafka khi chúng được tạo.

Luồng Kafka

Kafka Streams là một thư viện máy khách ( KStream) mà các nhà phát triển áp dụng mô hình pub/sub sử dụng để xây dựng các ứng dụng và dịch vụ siêu nhỏ dựa trên kho dữ liệu cụm Kafka. Các thông báo đến dưới dạng cặp khóa-giá trị, tương tự như một hàng hai cột trong thuật ngữ cơ sở dữ liệu SQL.

Thư viện KStream chứa các đối tượng KStream, được xây dựng từ các chủ đề Kafka bằng cách sử dụng KStreamBuilder(). KStream xử lý các luồng bản ghi, trong khi KTable hoạt động trên các khóa cụ thể. KTable đọc các khóa dưới dạng nhật ký thay đổi và cung cấp giá trị mới nhất cho từng khóa. Đối với các sự kiện dựa trên dữ liệu hiện tại chứ không phải các giá trị trước đó cho “bảng”, KTable giữ lại, quan sát và tìm giá trị gần đây nhất.

Kafka sử dụng hệ thống log-append để lưu trữ các thông điệp sự kiện. Mỗi thông điệp mà nó lưu trữ là bất biến và không thể thay đổi. Mỗi thông điệp được lưu trữ tương tự như một hàng SQL duy nhất.

Các ứng dụng có thể lấy dữ liệu phát trực tuyến và sử dụng các chủ đề bảng làm bộ tích lũy, cho phép chúng thay đổi động giữa giám sát không trạng thái và lưu trữ sự kiện có trạng thái. Trạng thái của Kafka không bị ảnh hưởng bởi ứng dụng tạo tin nhắn hoặc ứng dụng thăm dò tin nhắn.

Nhà môi giới Kafka

Các thể hiện Kafka được gọi là broker . Kafka được triển khai tối ưu với tối thiểu ba thể hiện, nhưng không có tối đa. Các broker Kafka được gọi chung là cụm Kafka . Các thành viên cụm có thể được triển khai trên Kubernetes, Docker, VM hoặc kết hợp các phương pháp triển khai này.

Producers là nguồn dữ liệu ứng dụng tạo và gửi chủ đề đến broker dẫn đầu. Theo mặc định, các phiên bản Kafka lắng nghe các thông báo sự kiện trên cổng TCP 9092của phiên bản broker được chỉ định. Cổng này được cấu hình trong đối tượng thư viện bootstrap được Publisher sử dụng để gửi thông báo. Kafka ghi các thông báo sự kiện vào kho lưu trữ của mình theo tuần tự, theo cặp khóa-giá trị. Các khóa là lặp lại, tuần tự và thiết lập trình tự của các thông báo/chủ đề.

Nhà môi giới chính, mà ứng dụng khám phá thông qua quá trình khởi động cho một chủ đề, có thông tin mới nhất. Các nhà môi giới theo sau sao chép các phân vùng từ kho lưu trữ của nhà môi giới dẫn đầu. Các phân vùng được sao chép trên các phiên bản nhà môi giới theo chương trình bởi ứng dụng Producer dựa trên khóa sự kiện của Producer.

Đổi lại, người tiêu dùng thăm dò broker dẫn đầu để biết các thông báo sự kiện trong các phân vùng. Các ứng dụng người tiêu dùng biết các phân vùng được chỉ định và các thông báo tuần tự có trong nhật ký.

Tin nhắn trong cụm Kafka được lưu trữ trên nhiều broker và được sắp xếp thành các phân vùng theo cấu hình của cụm. Thời gian lưu trữ mặc định là bảy ngày. Tuy nhiên, có thể lên đến một năm, tùy thuộc vào khối lượng giao dịch, dung lượng lưu trữ, lịch sử cần thiết và nhu cầu sao chép.

Người trông coi vườn thú

Một phiên bản Zookeeper và cấu hình của nó kiểm soát việc thiết lập và duy trì các cụm Kafka. Mỗi broker có một phiên bản Zookeeper khởi động trước phiên bản Kafka broker.

Các phiên bản Zookeeper giao tiếp với các Zookeeper khác trên mỗi broker để bầu ra một người lãnh đạo khi giao tiếp không thành công hoặc bị hỏng. Người lãnh đạo broker của cụm được cấu hình để cho phép dữ liệu hợp lý khi broker và do đó các phân vùng của nó không khả dụng.

Kafka theo dõi những người dùng thăm dò nhà môi giới dẫn đầu. Có nhiều cấu hình người dùng tiềm năng, bao gồm người dùng đơn lẻ, nhóm người dùng và kết hợp cả hai. Lựa chọn phụ thuộc vào yêu cầu lập trình và nhu cầu phục hồi. Tất cả các ứng dụng người dùng thăm dò Kafka với tư cách là người đăng ký kho dữ liệu của nó. Kafka sử dụng cơ chế nhịp tim để đảm bảo rằng người dùng không bị mất tính chẵn lẻ. Nếu điều này xảy ra, người dùng có thể mất chuỗi nhật ký và không được đồng bộ hóa với các nguồn cấp dữ liệu.

Producers và consumer có thể giao tiếp với Kafka đồng bộ hoặc không đồng bộ. Các tin nhắn trở thành bản ghi chủ đề không cần phải được định thời gian và các yêu cầu từ consumer có thể được thăm dò ngẫu nhiên.

Quy trình Zookeeper quản lý danh sách kiểm soát truy cập, phát hiện lỗi, bí mật xác thực, tùy chọn cấu hình được xác nhận trong khi lỗi và khôi phục hoạt động dựa trên chế độ lỗi trong cụm. Các chức năng quản trị thư viện của nó là cổng vào các thay đổi lập trình cho các chức năng ZooKeeper.

Sự kiện Kafka

Kafka nhận các sự kiện, có thể bao gồm nhiều sự kiện không liên kết từ cùng một Publisher, được gọi là luồng . Sự kiện là các thông báo được gửi đến các chủ đề cụ thể, được xác định trước. Thông báo được ứng dụng Publisher gửi đến cụm Kafka trở thành phân vùng chủ đề sau đó được sao chép đến các broker khác. Sự kiện được tuần tự hóa khi vào Kafka và được hủy tuần tự hóa khi thoát. Quá trình tuần tự hóa và hủy tuần tự hóa sự kiện (Ser/Des) được các ứng dụng xử lý thông qua hàm . Xem tài liệu Kiểu dữ liệu và tuần tự hóaSerdes() của Kafka để biết thêm thông tin về hàm.Serdes()

Phân vùng có thể được gửi đến nhiều thành viên môi giới trong một cụm. Nếu một thành viên môi giới không khả dụng hoặc một thành viên mới trực tuyến, cụm sẽ cân bằng lại các phân vùng trên toàn cụm, có khả năng bầu ra một người lãnh đạo mới trong quá trình này. Đối với nhà sản xuất và người tiêu dùng, cân bằng lại cụm là một quy trình có thể cấu hình các kiểm tra hợp lý để phù hợp với bản chất của việc cân bằng lại. Các phân vùng chứa cùng Serdes()các giá trị chủ đề trên các môi giới. Điều này cho phép một lỗi môi giới trong một cụm tạo ra dữ liệu được tuần tự hóa chính xác từ các phân vùng khác.

Nhà sản xuất Kafka

Producers là các ứng dụng nhận dữ liệu từ nhiều nguồn khác nhau và định dạng dữ liệu đó thành một sự kiện sau đó được xuất bản lên Kafka. Điều này có thể bao gồm việc đăng ký vào cụm Kafka với tư cách là người tiêu dùng. Dữ liệu nguồn có thể là dữ liệu giao dịch, kết quả của các giao dịch mua trên web, tra cứu hàng tồn kho, lượt thích nhận được trên diễn đàn trực tuyến, thông tin IoT đến từ các biện pháp kiểm soát nhiệt độ tòa nhà, giao dịch tài chính hoặc dữ liệu GPS.

Khi nhà sản xuất gửi một sự kiện đến một cụm, cụm sẽ ghi lại sự kiện đó dưới dạng một thông báo nhật ký và xác nhận việc ghi nhật ký với nhà sản xuất.

Producers chỉ định vị trí mạng của cụm, tạo thông điệp dưới dạng sự kiện, truyền thông điệp và chờ xác nhận từ cụm. Điều này tương tự như trình tự xác nhận cơ sở dữ liệu giao dịch. Ở đây, cơ sở dữ liệu (nhật ký Kafka) đã nhận được bản ghi (sự kiện thông điệp) và trả về thông điệp xác nhận đã nhận được sự kiện.

Nhà sản xuất cũng có thể chỉ định trong thông báo rằng dữ liệu sẽ được sao chép vào các phân vùng nhiều lần. Điều này đạt được bằng cách sử dụng giá trị băm của khóa trong cặp khóa-giá trị trong thông báo sự kiện.

Tin nhắn sự kiện của nhà sản xuất

Một thông điệp sự kiện bao gồm bốn thành phần:

  • Một tiêu đề hoặc các tiêu đề tùy chọn
  • Một chìa khóa
  • Một giá trị liên quan đến khóa
  • Dấu thời gian biểu thị thời gian thu thập hoặc thời gian tạo

Mỗi sự kiện Kafka là một cặp khóa-giá trị đơn giản với các tiêu đề tùy chọn và dấu thời gian. Khóa và giá trị là chuỗi hoặc số nguyên. Thời gian có thể được thiết lập rõ ràng bởi nhà sản xuất hoặc được đóng dấu thời gian khi tiếp nhận. Giá trị cũng có thể được viết theo nhiều định dạng khác nhau, bao gồm JSON và AVRO.

Nếu nhà sản xuất không cung cấp khóa, chiến lược mặc định của Kafka sẽ phân phối đều các chủ đề theo kiểu vòng tròn trên các phân vùng chủ đề của broker. Nếu cung cấp khóa, Kafka sẽ băm khóa và modulo của nó sẽ xác định số lượng phân vùng mà nó phân bổ cho một chủ đề trên các broker trong cụm của nó. Các chiến lược phân vùng tùy chỉnh sử dụng cấu hình Kafka để xác định số lượng phân vùng và phân bổ trên một cụm.

Thiết lập luồng và quản lý lưu lượng

Luồng nhập và quản lý cho các ứng dụng tương tác với Kafka được chia thành hai loại chung: ứng dụng đẩy và ứng dụng được thăm dò. Các kỹ thuật khác nhau được sử dụng cho từng loại để giúp lập kế hoạch cho các yêu cầu về khả năng mở rộng.

Các thiết bị và nguồn phát trực tuyến không trạng thái có thể được đệm trong ứng dụng trước khi ghi dữ liệu vào Kafka. Điều này tạo ra tốc độ cấp dữ liệu và chu kỳ nhiệm vụ có thể dự đoán được của các giao dịch cho một ứng dụng. Xử lý dữ liệu có thể diễn ra sau khi luồng hoặc các luồng được đưa vào nhật ký Kafka.

Thư viện ứng dụng Kafka chứa một lớp có tên là Interface ProducerInterceptor. Lớp này được thiết kế để chặn và tùy ý sửa đổi các nguồn dữ liệu được truyền phát trước khi xử lý các sự kiện được gửi đến các chủ đề Kafka. Điều này thường được thực hiện thông qua một phép biến đổi hoặc lambda. Lớp này cho phép nắm bắt các nguồn đã lên kế hoạch của các luồng dữ liệu không bị ràng buộc, hợp nhất hoặc nối chúng với các nguồn dữ liệu khác và đặt chúng vào các cặp khóa-giá trị được sử dụng bởi tin nhắn Kafka.

Các thành phần này cùng các thành phần khác của Kafka API cho phép các mô hình chương trình thiết lập kiểm soát luồng và khi cần, ghi nhật ký các mô hình từ nhiều nguồn để đạt được các mối quan hệ phức tạp.

Khi các luồng không thể được thăm dò hoặc có trạng thái, không đồng bộ hoặc không thường xuyên, Kafka sẽ mở rộng số lượng môi giới/phân vùng để tăng tốc độ giao dịch.

Chức năng ZooKeeper nhanh chóng xác định khi nào người tiêu dùng và người môi giới gặp sự cố, thông báo cho nhà sản xuất nơi chuyển hướng dữ liệu đầu vào đến các thành viên còn sống sót của cụm bị hỏng. Thời gian phục hồi được giảm thiểu để ngăn ngừa độ trễ của hệ thống.

Lượng thời gian căn chỉnh lại cụm thay đổi tùy thuộc vào kích thước của cụm và độ trễ giữa các broker. Kafka phải phản ứng với các thay đổi do hàm Zookeeper kích hoạt trong các sự kiện sắp xếp lại cụm. Tính đồng bộ của cụm thay đổi tùy theo cấu hình của cụm và các chi tiết được nêu bật trong API KStreams .

Ví dụ thiết lập Kafka

Phát triển ứng dụng với Kafka được thực hiện bằng Môi trường phát triển tích hợp (IDE) hoặc thông qua cấu hình thủ công của ứng dụng Kafka. Các IDE như IntelliJ IDEA có thể tận dụng các lớp thư viện Kafka tùy chọn tận dụng các định tuyến cấu hình đối tượng Kafka cho các tác vụ của nhà sản xuất, người đăng ký và quản trị dưới dạng các lớp ngôn ngữ Java.

Các thư viện kết nối các đối tượng này với các ngôn ngữ khác, chẳng hạn như C#, Python và Ruby, có sẵn cho nhiều nền tảng IDE.

Akamai cung cấp hướng dẫn về cách cài đặt và cấu hình Apache Kafka trên Ubuntu . Ví dụ này dựa trên cài đặt và cấu hình được hiển thị trong hướng dẫn đó.

Mã này được viết bằng Java hiện đại và sử dụng slf4jkhung ghi nhật ký, một mặt tiền ghi nhật ký thường được sử dụng trong Java . Các phụ thuộc cho máy khách Java Kafka bao gồm các cấu hình thường được sử dụng sau:

<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients -->
<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>3.3.1</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>2.0.6</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>2.0.6</version>
</dependency>

Khi chạy, các phụ thuộc này sẽ trải qua các thay đổi số phiên bản dần dần khi các phiên bản mới hơn được phát hành. Bạn có thể sử dụng các phụ thuộc này để xây dựng một lớp nhà sản xuất Kafka. Mã bên dưới biểu diễn một lớp nhà sản xuất Kafka trong org.examplegói, sử dụng slf4jkhung ghi nhật ký:

package org.example;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Producer {
    private static final Logger log = LoggerFactory.getLogger(KafkaProducer.class);

    public static void main(String[] args) {
        log.info("This Producer class will produce messages to the Kafka cluster or instance");
    }
}

Lớp producer được đặt bên trong main()hàm của ứng dụng Java và nó gọi slf4jlogger và LoggerFactorybuilder. Bạn phải bao gồm các thuộc tính này trong main()phương thức:

package org.example;

import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.common.serialization.StringSerializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Properties;

public class Producer {
    private static final Logger log = LoggerFactory.getLogger(Producer.class);

    public static void main(String[] args) {
        log.info("This Producer class will produce messages to the Kafka cluster or instance");

        // Kafka producer configuration properties
        Properties properties = new Properties();
        properties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
        properties.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
        properties.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());

        // Add Kafka producer logic here
    }
}

Mã này xác định cách tiếp cận phiên bản Kafka. localhostđược sử dụng làm ví dụ, nhưng có thể thay thế bằng địa chỉ IP chính xác hoặc Tên miền đủ điều kiện (FQDN). Gọi cho key_serializercả khóa và giá trị trong cặp khóa-giá trị mà Kafka lưu trữ.

Phương pháp này send()được sử dụng để truyền bản ghi (tức là sự kiện hoặc tin nhắn) tới các chủ đề Kafka:

producer.send(producerRecord)

Gọi send()phương thức này sẽ cập nhật giá trị của producerRecord. Khi kết thúc quá send()trình, một close()phương thức sẽ dừng nhà sản xuất và xóa bộ đệm tin nhắn.

Thiết lập phương send()thức yêu cầu các producerRecordgiá trị được điền. Đối với luồng, mã có thể thiết lập cơ chế thăm dò để lấy giá trị. Ví dụ, các vòng lặp như for-nextdo-while, và các hàm/phương thức khác điền vào producerRecordđể được phương thức đẩy send().

Các hàm tiêu dùng sử dụng các phương pháp tương tự để lấy bản ghi, được gọi bằng một main()phương pháp:

package org.example;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Consumer {
    private static final Logger log = LoggerFactory.getLogger(Consumer.class);

    public static void main(String[] args) {
        log.info("This class consumes messages from Kafka");

        // Add Kafka consumer logic here
    }
}

Thuộc tính của người dùng tương tự như thuộc tính của Producer.java, nhưng máy khách phải hủy tuần tự hóa các bản ghi, vì Kafka tuần tự hóa chúng khi lưu trữ và thêm một độ lệch:

import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.common.serialization.StringDeserializer;

import java.util.Properties;

public class Consumer {
    // Logger and other parts of the class remain the same...

    public static void main(String[] args) {
        log.info("This class consumes messages from Kafka");

        // Kafka consumer configuration properties
        Properties properties = new Properties();
        properties.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
        properties.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
        properties.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
        properties.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "lotr_consumer_group");
        properties.setProperty(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");

        // Add Kafka consumer logic here
    }
}

Phía người dùng của ứng dụng phải biết các thuộc tính trên để kết nối với máy chủ bootstrap chính xác. Nó cũng phải có khả năng hiểu SerDes của các bản ghi mà nó tìm kiếm, cùng với tư cách thành viên của nó nếu trong một nhóm người dùng. Điều này đảm bảo rằng các bản ghi Kafka mà người dùng yêu cầu được xử lý chính xác, xem xét độ lệch bản ghi của chúng, có thể khác với người dùng khác.

Giống như đối tượng nhà sản xuất, đối tượng người dùng sử dụng close()phương thức để kết thúc và duy trì trạng thái ứng dụng một cách nhẹ nhàng.

Những mối quan hệ này được giải thích chi tiết hơn tại freecodecamp.org .

Phần kết luận

Apache Kafka đóng vai trò là nhật ký phân tán để sử dụng trong mô hình kiến ​​trúc pub/sub. Bằng cách tạo ra nhiều broker, nó cung cấp độ tin cậy cao trên toàn bộ kho lưu trữ tin nhắn của khuôn khổ phân tán.

Nhà xuất bản và người tiêu dùng sử dụng kho lưu trữ chủ đề của Kafka để tạo ứng dụng độc lập với nhau. Nhà xuất bản ghi dữ liệu vào nhật ký Kafka thông qua các quy trình tiếp nhận dữ liệu, trong khi người tiêu dùng đọc nhật ký như nguồn dữ liệu của họ.

Kiến trúc pub/sub của Kafka, tách biệt các ứng dụng đầu vào và đầu ra, rất phù hợp với các dịch vụ vi mô. Các ứng dụng được viết bằng nhiều ngôn ngữ khác nhau có thể tận dụng các hàm thư viện của Kafka để tương tác với kho chủ đề phân tán của nó.

Thông tin thêm

Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.

Nguồn : https://www.linode.com/docs/guides/use-apache-kafka-to-process-streams/