-
- Tổng tiền thanh toán:
Apache Kafka là gì? Tìm hiểu và ứng dụng Apache Kafka cho hệ thống IoT
Khi nói đến Internet of Things (IoT) và Smart Factory , nhiều nhà phát triển nghĩ về các bộ vi điều khiển, bo mạch hệ thống, máy tính bảng đơn, cảm biến và các thành phần điện tử khác. Mặc dù các thiết bị chắc chắn là nền tảng của IoT và giá trị cốt lõi của một giải pháp được kết nối nằm trong dữ liệu được tạo ra bởi các thiết bị này.
Tuy nhiên lớp thiết bị chỉ là phần nổi của tảng băng với nền tảng dữ liệu cơ bản nằm dưới giải quyết việc nâng 1 vật nặng. Một trong những trụ cột chính của nền tảng dữ liệu IoT mạnh mẽ là Apache Kafka , một phần mềm nguồn mở được thiết kế để xử lý lượng dữ liệu khổng lồ. Nó hoạt động như một Gateway vào pipeline xử lý dữ liệu được cung cấp trong trung tâm dữ liệu bởi các cụm Apache Storm , Apache Spark và Apache Hadoop .
Nếu bạn là nhà phát triển coi IoT và đang cân nhắc phát triển các ứng dụng nhà máy thông minh, đã đến lúc bạn bắt đầu đầu tư vào Apache Kafka. Bài viết này tìm hiểu vai trò của Apache Kafka trong việc triển khai một giải pháp IoT có thể mở rộng cho các ứng dụng doanh nghiệp thông minh.
Nếu bạn chưa hiểu về các giao thức truyền tin IoT, hãy xem qua bài viết này : MQTT là gì ?
Apache Kafka là gì?
Apache Kafka là hệ thống message pub/sub phân tán (distributed messaging system). Bên pulbic dữ liệu được gọi là producer, bên subscribe nhận dữ liệu theo topic được gọi là consumer. Apache Kafka có khả năng truyền một lượng lớn message theo thời gian thực, trong trường hợp bên nhận chưa nhận message vẫn được lưu trữ sao lưu trên một hàng đợi và cả trên ổ đĩa bảo đảm an toàn. Đồng thời nó cũng được replicate trong cluster giúp phòng tránh mất dữ liệu.
Một cấu trúc Apache Kafka đơn giản
Các case studies Apache Kafka:
- IoT và mạng cảm biến
- Xử lý tin nhắn quy mô lớn
- Xử lý luồng
- Xử lý luồng sự kiện kinh doanh và người dùng trong thời gian thực
- Tổng hợp số liệu và nhật ký từ các máy chủ và ứng dụng phân tán
- Quản lý và phân phối nội dung cho nhiều ứng dụng trong thời gian thực
- Dữ liệu trung gian cho các cụm phân tích, phân tích web thời gian thực và phân tích dự đoán theo thời gian thực.
Các khái niệm cơ bản
Apache Kafka có thể hiểu là một hệ thống logging để lưu lại các trạng thái của hệ thống đề phòng tránh mất thông tin.
Định nghĩa trên được giải thích bằng các khái niệm sau:
- PRODUCER: Apache Kafka lưu, phân loại message theo
topic
, sử dụngproducer
để publish message vào cáctopic
. Dữ liệu được gửi đển partition của topic lưu trữ trên Broker. - CONSUMER: Apache Kafka sử dụng
consumer
để subscribe vào topic, cácconsumer
được định danh bằng các group name. Nhiềuconsumer
có thể cùng đọc một topic. - TOPIC: Dữ liệu truyền trong Apache Kafka theo topic, khi cần truyền dữ liệu cho các ứng dụng khác nhau thì sẽ tạo ra cá topic khác nhau.
- PARTITION: Đây là nơi dữ liệu cho một
topic
được lưu trữ. Mộttopic
có thể có một hay nhiềupartition
. Trên mỗipartition
thì dữ liệu lưu trữ cố định và được gán cho một ID gọi làoffset
. Trong một Apache Kafka cluster thì một partition có thể replicate (sao chép) ra nhiều bản. Trong đó có một bảnleader
chịu trách nhiệm đọc ghi dữ liệu và các bản còn lại gọi làfollower
. Khi bảnleader
bị lỗi thì sẽ có một bảnfollower
lên làmleader
thay thế. Nếu muốn dùng nhiều consumer đọc song song dữ liệu của một topic thì topic đó cần phải có nhiều partition. - BROKER: Apache Kafka cluster là một set các server, mỗi một set này được gọi là 1 broker
- ZOOKEEPER: được dùng để quản lý và bố trí các broker.
Cấu trúc Apache Kafka chi tiết
Tại sao nên sử dụng Apache Kafka?
Apache Kafka là dự án opensoure, đã được đóng gói hoàn chỉnh, khả năng chịu lỗi cao, hiệu năng rất tốt và dễ dàng mở rộng mà không cần dừng hệ thống. Apache Kafka thật sự đáng tin cậy, có khả năng lưu trữ lượng dữ liệu lớn nên nó đang dần được thay thế cho hệ thống message truyền thống.
Một vài use case cho Apache Kafka:
- Sử dụng như một hệ thống message queue thay thế cho ActiveMQ hay RabbitMQ
- Website Activity Monitoring: theo dõi hoạt động của website
- Stream Processing: Apache Kafka là một hệ thống rất thích hợp cho việc xử lý dòng dữ liệu trong thời gian thực. Khi dữ liệu của một topic được thêm mới ngay lập tức được ghi vào hệ thống và truyền đến cho bên nhận. Ngoài ra Apache Kafka còn là một hệ thống có đặc tính duribility dữ liệu có thể được lưu trữ an toàn cho đến khi bên nhận sẵn sàng nhận nó.
- Log Aggregation: tổng hợp log
- Metrics Collection: thu thập dữ liệu, tracking hành động người dùng như các thông số như page view, search action của user sẽ được publish vào một topic và sẽ được xử lý sau
- Event-Sourcing: Lưu lại trạng thái của hệ thống để có thể tái hiện trong trường hợp system bị down.
Apache Kafka: Lớp nhập liệu hiệu suất cao cho dữ liệu cảm biến IoT
Các thiết bị IoT bao gồm nhiều loại cảm biến có khả năng tạo ra nhiều điểm dữ liệu, được thu thập ở tần số cao. Một bộ điều nhiệt đơn giản có thể tạo ra một vài byte dữ liệu mỗi phút trong khi một chiếc xe được kết nối hoặc một tuabin gió tạo ra hàng gigabyte dữ liệu chỉ trong vài giây. Các bộ dữ liệu khổng lồ này được đưa vào pipeline xử lý dữ liệu để lưu trữ, chuyển đổi, xử lý, truy vấn và phân tích. Mỗi bộ dữ liệu bao gồm nhiều điểm dữ liệu đại diện cho các số liệu cụ thể.
Ví dụ, hệ thống sưởi, thông gió và điều hòa không khí (HVAC) được kết nối sẽ báo cáo nhiệt độ môi trường, nhiệt độ mong muốn, độ ẩm, chất lượng không khí, tốc độ quạt, tải và chỉ số tiêu thụ năng lượng.
Trong một khu mua sắm lớn, những điểm dữ liệu này thường được thu thập từ hàng trăm HVAC. Vì các thiết bị này có thể không đủ mạnh để chạy toàn bộ ngăn xếp mạng TCP, chúng sử dụng các giao thức như Z-Wave và ZigBee để gửi dữ liệu đến một Gateway trung tâm có khả năng tổng hợp các điểm dữ liệu và đưa chúng vào hệ thống.
Gateway đẩy dữ liệu được đặt thành cụm Apache Kafka, nơi dữ liệu có nhiều đường dẫn. Các điểm dữ liệu cần được theo dõi trong thời gian thực đi qua đường dẫn nóng. Trong kịch bản HVAC của chúng ta , điều quan trọng là theo dõi các số liệu như nhiệt độ, độ ẩm và chất lượng không khí trong thời gian thực để có biện pháp khắc phục. Các điểm dữ liệu này có thể đi qua cụm Apache Storm và Apache Spark để xử lý gần thời gian thực.
Các số liệu như tải và tiêu thụ năng lượng được phân tích sau khi thu thập chúng trong một khoảng thời gian. Các điểm dữ liệu được thu thập và phân tích thông qua một quy trình hàng loạt thường đi theo đường dẫn lạnh của pipeline xử lý dữ liệu. Công việc MapReduce có thể được chạy trong cụm Hadoop để phân tích hiệu quả năng lượng của HVAC.
Ứng dụng của Apache Kafka rất rộng rãi
Bất kể đường dẫn mà các điểm dữ liệu đi theo, chúng cần được đưa vào hệ thống. Apache Kafka hoạt động như lớp nhập dữ liệu hiệu năng cao xử lý số lượng lớn các tập dữ liệu. Các thành phần của pipeline xử lý dữ liệu chịu trách nhiệm phân tích đường dẫn nóng và đường dẫn lạnh trở thành người đăng ký của Apache Kafka.
Apache Kafka so với MQTT
Apache Kafka không phải là sự thay thế cho MQTT, đây là một Broker tin nhắn thường được sử dụng để liên lạc giữa máy với máy (M2M). Mục tiêu thiết kế của Apache Kafka rất khác so với MQTT. Trong một giải pháp IoT, các thiết bị có thể được phân loại thành các cảm biến và cơ cấu chấp hành. Các cảm biến tạo ra các điểm dữ liệu trong khi các bộ truyền động là các thành phần cơ học có thể được điều khiển thông qua các lệnh.
Ví dụ, ánh sáng xung quanh trong phòng có thể được sử dụng để điều chỉnh độ sáng của bóng đèn LED. Trong kịch bản này, cảm biến ánh sáng cần nói chuyện với đèn LED, đây là một ví dụ về giao tiếp M2M. MQTT là giao thức được tối ưu hóa cho mạng cảm biến và M2M.
Vì Apache Kafka không sử dụng HTTP để nhập, nên nó mang lại hiệu suất và quy mô tốt hơn.
Bản chất MQTT được thiết kế cho các thiết bị năng lượng thấp , nó không thể xử lý việc thu thập các bộ dữ liệu lớn. Mặt khác, Apache Kafka có thể xử lý việc nhập dữ liệu tốc độ cao nhưng không phải với M2M.
Các giải pháp IoT có thể mở rộng sử dụng MQTT như một giao tiếp thiết bị rõ ràng trong khi dựa vào Apache Kafka để nhập dữ liệu cảm biến. Cũng có thể bắc cầu Apache Kafka và MQTT để ăn và M2M. Nhưng bạn nên tách chúng ra bằng cách định cấu hình các thiết bị hoặc Gateway như nhà sản xuất Apache Kafka trong khi vẫn tham gia vào mạng M2M được quản lý bởi Broker MQTT.
Kết nối Kafka và MQTT
Kafka có một khung mở rộng, được gọi là Kafka Connect, cho phép Kafka nhập dữ liệu từ các hệ thống khác. Kafka Connect cho MQTT hoạt động như một ứng dụng khách MQTT đăng ký tất cả các tin nhắn từ một Broker MQTT.
Nếu bạn không có quyền kiểm soát Broker MQTT, Kafka Connect cho MQTT là một cách tiếp cận tốt để theo đuổi. Cách tiếp cận này cho phép Kafka nhập luồng tin nhắn MQTT.
Có những hạn chế về hiệu suất và khả năng mở rộng khi sử dụng Kafka Connect cho MQTT. Như đã đề cập, Kafka Connect cho MQTT là một ứng dụng khách MQTT đăng ký các TẤT CẢ các tin nhắn MQTT có khả năng truyền qua một Broker. Các thư viện máy khách MQTT không có ý định xử lý số lượng rất lớn các thông điệp MQTT, vì vậy các hệ thống IoT sử dụng phương pháp này sẽ có các vấn đề về hiệu suất và khả năng mở rộng.
Cách tiếp cận này tập trung logic chuyển đổi thông điệp và kinh doanh và tạo ra sự kết hợp chặt chẽ, cần tránh trong các kiến trúc phân tán (microservice).
Công ty tư vấn hàng đầu trong ngành, The Thinkworks đã gọi đây là một mô hình chống và thậm chí đưa Kafka vào danh mục của Nắm giữ trong các ấn phẩm Radar công nghệ trước đây của họ .
Apache Kafka so với HTTP / REST
Apache Kafka đưa ra một Gateway TCP dựa trên giao thức nhị phân. client , đẩy dữ liệu, khởi tạo kết nối ổ cắm và sau đó viết một chuỗi các thông báo yêu cầu và đọc lại thông điệp phản hồi tương ứng. Giao thức này không yêu cầu bắt tay cho mỗi kết nối hoặc ngắt kết nối.
Vì Apache Kafka không sử dụng HTTP để nhập, nên nó mang lại hiệu suất và quy mô tốt hơn. client có thể kết nối với một trong các phiên bản của cụm để nhập dữ liệu. Kiến trúc này kết hợp với các socket TCP thô cung cấp khả năng mở rộng và thông lượng tối đa.
Mặc dù có thể muốn sử dụng proxy HTTP để liên lạc với cụm Apache Kafka, nhưng giải pháp này sử dụng client gốc. Vì Apache Kafka được viết bằng Java, thư viện client Java gốc cung cấp hiệu suất tốt nhất có thể. Cộng đồng đã xây dựng thư viện khách hàng tối ưu hóa cho Go, Python , và thậm chí Node.js .
Shopify cũng đã đóng góp cho một thư viện Go mã nguồn mở cho Apache Kafka được gọi là Sarama . Nhóm Mailgun tại Rackspace đã xây dựng Apache Kafka-Pixy , một proxy HTTP mã nguồn mở cho Apache Kafka. Có nhiều thư viện cho Python, C #, Ruby và các ngôn ngữ khác.
Hầu hết các Gateway IoT đều đủ mạnh để chạy Java, Go hoặc Python. Để có hiệu suất và thông lượng tốt nhất, nên sử dụng thư viện khách được thiết kế nguyên bản cho Apache Kafka.
Bắt đầu với Apache Kafka như thế nào ?
Apache Kafka được phát triển bằng Java và việc triển khai của nó được quản lý bởi Apache ZooKeeper . Bất kỳ HĐH nào có khả năng chạy JVM đều có thể được sử dụng để triển khai cụm Apache Kafka. Để kiểm tra thử, bạn có thể muốn chạy Apache Kafka trong Docker .
Nếu bạn không muốn đối phó với cơ sở hạ tầng, bạn có thể bắt đầu với dịch vụ Apache Kafka được quản lý trên đám mây. IBM Bluemix có Message Hub , một dịch vụ nhắn tin dựa trên đám mây được quản lý hoàn toàn dựa trên Apache Kafka.
Cloud Karafka là một nền tảng phát trực tuyến khác trong đám mây công cộng, được thiết kế cho khối lượng công việc Apache Kafka. Aiven.io cung cấp Apache Kafka được lưu trữ cùng với InfluxDB, Grafana và Elaticsearch. Nếu bạn là một nhà phát triển Salesforce.com hoặc Heroku hiện có, bạn có thể tận dụng Apache Kafka trên Heroku .