✨Apache Kafka

Apache Kafka

Apache Kafka là một nền tảng theo kiến trúc phân tán cho phép lưu trữ sự kiện và xử lý dữ liệu luồng (streaming) mã nguồn mở được phát triển bởi Apache Software Foundation được viết bằng Java và Scala.

Lịch sử

Kafka ban đầu được phát triển bởi LinkedIn và sau đó được mở nguồn vào đầu năm 2011. Jay Kreps, Neha Narkhede và Jun Rao là các đồng sáng lập nền tảng phần mềm Kafka. Xuất phát từ dự án Apache Incubator vào ngày 23 tháng 10 năm 2012, phần mềm được Jay Kreps đặt tên theo tên nhà văn Franz Kafka vì theo anh nó là "một hệ thống được tối ưu hóa cho việc viết", và anh rất thích các tác phẩm của Kafka.

Nhiều hệ thống ứng dụng xuất bản dữ liệu số lượng lớn hoặc ứng dụng thời gian thực đã sử dụng Kafka, ví dụ quản lý đối sánh hành khách và tài xế tại Uber, nhiều dịch vụ thời gian thực trên toàn bộ LinkedIn.

Kiến trúc

Kafka lưu trữ các gói tin dạng cặp khóa-giá trị gửi đến từ nhiều tiến trình được gọi là producer. Dữ liệu có thể được phân hoạch thành các "phân vùng" (partition) trong các "chủ đề" (topic) khác nhau. Trong một phân vùng, các gói tin được sắp xếp theo thứ tự nghiêm ngặt của chúng (vị trí của một gói tin trong một phân vùng), được lập chỉ mục và lưu trữ cùng với một mốc thời gian. Các tiến trình khác được gọi là consumer có thể đọc tin nhắn từ các phân vùng. Để xử lý dữ liệu luồng stream, Kafka cung cấp Stream API cho phép viết các ứng dụng Java sử dụng dữ liệu từ Kafka và ghi kết quả trở lại Kafka. Apache Kafka cũng hoạt động với các hệ thống xử lý dữ liệu luồng (stream processing system) khác bên ngoài như Apache Apex, Apache Flink, Apache Spark, Apache Storm hay Apache NiFi.

Kafka chạy trên một cụm gồm một hoặc nhiều máy chủ (được gọi là broker) và các partition của tất cả các topic được phân phối trên các nút trong cụm máy chủ. Ngoài ra, các phân vùng được sao chép cho nhiều broker. Kiến trúc này cho phép Kafka truyền tải các luồng thông điệp khổng lồ theo phương thức truyền tải an toàn, có khả năng chịu lỗi và cho phép nó thay thế một số hệ thống truyền tin thông thường như Java Message Service (JMS), Advanced Message Queueing Protocol (AMQP), v.v. Kể từ phiên bản 0.11.0.0, Kafka cung cấp tính năng ghi phiên giao dịch (transactional writes), cho phép xử lý dữ liệu luồng chính xác một lần bằng cách sử dụng streams API.

Có năm API chính trong Kafka bao gồm:

  • Producer API - Cho phép ứng dụng xuất bản các luồng bản ghi.
  • Consumer API - Cho phép ứng dụng đăng ký các topic và xử lý các bản ghi luồng dữ liệu.
  • Connector API - Thực thi các consumer và producer API cho phép liên kết các topic với các ứng dụng sẵn có.
  • Streams API - API này chuyển đổi các dữ liệu luồng đầu vào thành đầu ra và tạo ra kết quả.
  • Admin API - được sử dụng để quản lý các topic, broker, và các đối tượng Kafka khác.

Các consumer và producer API xây dựng dựa trên giao thức truyền tin của Kafka và cung cấp triển khai tham chiếu cho các ứng dụng khách consumer và producer client xây dựng trên Java. Giao thức truyền tin cơ bản là một giao thức dạng nhị phân (binary protocol) mà các nhà phát triển có thể sử dụng để viết các ứng dụng consumer và producer client của riêng họ trên bất kỳ ngôn ngữ lập trình nào. Điều này cho phép Kafka thoát khỏi việc phụ thuộc vào hệ sinh thái Máy ảo Java (JVM).

Ngôn ngữ lập trình

Kafka hỗ trợ nhiều ngôn ngữ lập trình phía client như:

  • C/C++
  • Python
  • Go (hay golang)
  • Erlang
  • PowerShell
  • .NET
  • Clojure
  • Ruby
  • Node.js
  • Perl
  • PHP
  • Rust
  • Java
  • Storm
  • Scala DSL
  • Clojure
  • Swift

Ví dụ code client sử dụng Kafka trên Python: from kafka import KafkaProducer, KafkaConsumer import json

Define Kafka producer configuration

producer = KafkaProducer(bootstrap_servers=['localhost:9092'], value_serializer=lambda x: json.dumps(x).encode('utf-8'))

Define Kafka consumer configuration

consumer = KafkaConsumer('my-topic', bootstrap_servers=['localhost:9092'], auto_offset_reset='earliest', enable_auto_commit=True, group_id='my-group', value_deserializer=lambda x: json.loads(x.decode('utf-8')))

Produce message to Kafka topic

producer.send('my-topic', {'key': 'value'})

Consume messages from Kafka topic

for message in consumer: print(message.value)

👁️ 2 | 🔗 | 💖 | ✨ | 🌍 | ⌚
**Apache Kafka** là một nền tảng theo kiến trúc phân tán cho phép lưu trữ sự kiện và xử lý dữ liệu luồng (streaming) mã nguồn mở được phát triển bởi Apache Software Foundation được
Apache **Log4j** là một trình ghi nhật ký trên nền tảng Java. Ban đầu, Log4j được phát triển bởi Ceki Gülcü và hiện nay là một dự án của Quỹ Phần mềm Apache. Log4j là
Hiện nay có nhiều công cụ Big Data Analytics được sử dụng phổ biến trong các tổ chức và doanh nghiệp, bao gồm: - Hadoop: Hadoop là một framework mã nguồn mở cho phép lưu