Logo Zephyrnet

Xây dựng kiến ​​trúc hướng sự kiện với Amazon MSK và Amazon EventBridge | Dịch vụ web của Amazon

Ngày:

Dựa trên các sự kiện (sự kiện) không thể thay đổi, kiến ​​trúc hướng sự kiện (EDA) cho phép doanh nghiệp hiểu sâu hơn về hành vi của khách hàng, mở khóa các quy trình ra quyết định chính xác hơn và nhanh hơn nhằm mang lại trải nghiệm tốt hơn cho khách hàng. Trong EDA, các nhà môi giới sự kiện hiện đại, chẳng hạn như Sự kiện Amazon và Apache Kafka, đóng vai trò quan trọng trong việc xuất bản và đăng ký các sự kiện. EventBridge là bus sự kiện không có máy chủ, nhập dữ liệu từ các ứng dụng, ứng dụng phần mềm dưới dạng dịch vụ (SaaS) của riêng bạn cũng như các dịch vụ AWS và định tuyến dữ liệu đó đến mục tiêu. Mặc dù có sự chồng chéo trong vai trò là xương sống trong EDA, nhưng cả hai giải pháp đều xuất phát từ các báo cáo vấn đề khác nhau và cung cấp các tính năng độc đáo để giải quyết các trường hợp sử dụng cụ thể. Với sự hiểu biết vững chắc về cả hai công nghệ và trường hợp sử dụng chính của chúng, các nhà phát triển có thể tạo ra các EDA dễ sử dụng, có thể bảo trì và có thể phát triển.

Nếu trường hợp sử dụng được xác định rõ và ánh xạ trực tiếp tới một bus sự kiện, chẳng hạn như phát trực tuyến sự kiện và phân tích với các sự kiện phát trực tuyến (Kafka) hoặc tích hợp ứng dụng với tính năng lọc, chuyển đổi và định tuyến sự kiện đơn giản và nhất quán trên các sự kiện riêng biệt (EventBridge), thì quyết định sẽ được đưa ra. đối với một công nghệ môi giới cụ thể là đơn giản. Tuy nhiên, các tổ chức và yêu cầu kinh doanh thường phức tạp hơn và vượt quá khả năng của một công nghệ môi giới. Trong hầu hết mọi trường hợp, việc chọn nhà môi giới sự kiện không phải là một quyết định nhị phân. Kết hợp các công nghệ môi giới bổ sung và tận dụng những thế mạnh độc đáo của chúng là một cách tiếp cận vững chắc để xây dựng các EDA dễ sử dụng, có thể bảo trì và có thể phát triển. Để giúp quá trình tích hợp giữa Kafka và EventBridge trở nên mượt mà hơn nữa, AWS đã cung cấp Trình kết nối EventBridge có nguồn mở dựa trên Apache Kafka. Điều này cho phép bạn sử dụng từ quá trình triển khai Kafka tại chỗ và tránh giao tiếp điểm-điểm trong khi sử dụng kiến ​​thức và bộ công cụ hiện có của Kafka Connect.

Các ứng dụng phát trực tuyến cho phép tính toán trạng thái trên các tập dữ liệu không liên kết. Điều này cho phép các trường hợp sử dụng theo thời gian thực như phát hiện sự bất thường, tính toán theo thời gian sự kiện, v.v. Các ứng dụng này có thể được xây dựng bằng các khung như Apache Flink, Apache Spark hoặc Kafka Streams. Mặc dù một số khung đó hỗ trợ gửi sự kiện đến các hệ thống hạ nguồn khác ngoài Apache Kafka, nhưng không có cách tiêu chuẩn hóa nào để thực hiện việc đó trên các khung. Nó sẽ yêu cầu mỗi chủ sở hữu ứng dụng xây dựng logic riêng của họ để gửi các sự kiện xuôi dòng. Trong EDA, cách ưa thích để xử lý tình huống như vậy là xuất bản các sự kiện lên bus sự kiện và sau đó gửi chúng xuống.

Có hai cách để gửi sự kiện từ Apache Kafka đến EventBridge: phương thức ưu tiên sử dụng Ống cầu sự kiện Amazon hoặc đầu nối chìm EventBridge cho Kafka Connect. Trong bài đăng này, chúng tôi khám phá thời điểm nên sử dụng tùy chọn nào và cách xây dựng EDA bằng trình kết nối bồn rửa EventBridge và Truyền trực tuyến được quản lý của Amazon cho Apache Kafka (Amazon MSK).

Đầu nối bồn rửa EventBridge so với Ống EventBridge

EventBridge Pipes kết nối các nguồn với các mục tiêu bằng khả năng tích hợp điểm-điểm, hỗ trợ lọc sự kiện, chuyển đổi, làm phong phú và phân phối sự kiện tới hơn 14 dịch vụ AWS và các mục tiêu dựa trên HTTPS bên ngoài bằng cách sử dụng Đích API. Đây là phương pháp ưa thích và dễ dàng nhất để gửi sự kiện từ Kafka đến EventBridge vì nó đơn giản hóa việc thiết lập và vận hành với trải nghiệm thú vị dành cho nhà phát triển.

Ngoài ra, trong những trường hợp sau đây, bạn có thể muốn chọn trình kết nối chìm EventBridge để gửi trực tiếp các sự kiện từ Kafka đến Xe buýt sự kiện EventBridge:

  • Bạn đã đầu tư vào các quy trình và công cụ xung quanh khung Kafka Connect làm nền tảng mà bạn chọn để tích hợp với các hệ thống và dịch vụ khác
  • Bạn cần tích hợp với sổ đăng ký lược đồ tương thích với Kafka, ví dụ: Đăng ký lược đồ keo AWS, hỗ trợ các định dạng dữ liệu Avro và Protobuf để tuần tự hóa và giải tuần tự hóa sự kiện
  • Bạn muốn gửi trực tiếp các sự kiện từ môi trường Kafka tại chỗ đến Xe buýt sự kiện EventBridge

Tổng quan về giải pháp

Trong bài đăng này, chúng tôi chỉ cho bạn cách sử dụng Kafka Connect và trình kết nối bồn rửa EventBridge để gửi các sự kiện được tuần tự hóa Avro từ Truyền phát được quản lý của Amazon cho Apache Kafka (Amazon MSK) tới EventBridge. Điều này cho phép luồng dữ liệu liền mạch và nhất quán từ Apache Kafka đến hàng chục mục tiêu đối tác và AWS của EventBridge được hỗ trợ, chẳng hạn như Amazon CloudWatch, Amazon SQS, AWS Lambda và các mục tiêu HTTPS như Salesforce, Datadog và Snowflake bằng cách sử dụng đích API EventBridge. Sơ đồ sau đây minh họa kiến ​​trúc hướng sự kiện được sử dụng trong bài đăng blog này dựa trên Amazon MSK và EventBridge.

Sơ đồ kiến ​​trúc

Quy trình làm việc bao gồm các bước sau:

  1. Ứng dụng demo tạo ra các giao dịch thẻ tín dụng được gửi tới Amazon MSK bằng định dạng Avro.
  2. Một ứng dụng phân tích chạy trên Amazon Elastic Container Service (Amazon ECS) sẽ xử lý các giao dịch và phân tích chúng nếu có điều bất thường.
  3. Nếu phát hiện thấy điều bất thường, ứng dụng sẽ phát ra sự kiện phát hiện gian lận quay lại chủ đề thông báo MSK.
  4. Trình kết nối EventBridge sử dụng các sự kiện phát hiện gian lận từ Amazon MSK ở định dạng Avro.
  5. Trình kết nối chuyển đổi các sự kiện thành JSON và gửi chúng đến EventBridge.
  6. Trong EventBridge, chúng tôi sử dụng quy tắc lọc JSON để lọc các sự kiện của mình và gửi chúng đến các dịch vụ khác hoặc dịch vụ khác Xe buýt sự kiện. Trong ví dụ này, các sự kiện phát hiện gian lận được gửi tới Nhật ký Amazon CloudWatch để kiểm tra và xem xét nội tâm cũng như cho nhà cung cấp SaaS bên thứ ba để giới thiệu mức độ dễ dàng tích hợp với API của bên thứ ba, chẳng hạn như Salesforce.

Điều kiện tiên quyết

Đối với hướng dẫn này, bạn nên có các điều kiện tiên quyết sau:

Triển khai ngăn xếp AWS CDK

Hướng dẫn này yêu cầu bạn triển khai ngăn xếp AWS CDK vào tài khoản của mình. Bạn có thể triển khai toàn bộ ngăn xếp từ đầu đến cuối hoặc chỉ các tài nguyên cần thiết để làm theo bài đăng này.

  1. Trong thiết bị đầu cuối của bạn, hãy chạy lệnh sau:
    git clone https://github.com/awslabs/eventbridge-kafka-connector/

  2. Điều hướng đến thư mục cdk:
    cd eventbridge-kafka-connector/cdk

  3. Triển khai ngăn xếp CDK AWS dựa trên tùy chọn của bạn:
  4. Nếu bạn muốn xem phần thiết lập hoàn chỉnh được giải thích trong bài đăng này, hãy chạy lệnh sau:
    cdk deploy —context deployment=FULL

  5. Nếu bạn muốn tự mình triển khai trình kết nối nhưng đã có sẵn các tài nguyên cần thiết, bao gồm cả cụm MSK, Quản lý truy cập và nhận dạng AWS (IAM), nhóm bảo mật, trình tạo dữ liệu, v.v., hãy chạy lệnh sau:
    cdk deploy —context deployment=PREREQ

Triển khai trình kết nối bồn EventBridge trên Amazon MSK Connect

Nếu bạn đã triển khai ngăn xếp CDK ở chế độ ĐẦY ĐỦ, bạn có thể bỏ qua phần này và chuyển sang Tạo quy tắc EventBridge.

Trình kết nối cần có vai trò IAM cho phép đọc dữ liệu từ cụm MSK và gửi bản ghi xuống EventBridge.

Tải mã kết nối lên Amazon S3

Hoàn tất các bước sau để tải mã kết nối lên Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3):

  1. Điều hướng đến Repo GitHub.
  2. Tải về bản phát hành 1.0.0 có bao gồm các phần phụ thuộc của Sổ đăng ký Lược đồ AWS Glue.
  3. Trên bảng điều khiển Amazon S3, chọn trong khung điều hướng.
  4. Chọn Tạo xô.
  5. Trong Tên nhóm, đi vào eventbridgeconnector-bucket-${AWS_ACCOUNT_ID}.

Vì nhóm S3 phải là duy nhất trên toàn cầu, hãy thay thế ${AWS_ACCOUNT_ID} bằng ID tài khoản AWS thực tế của bạn. Ví dụ, eventbridgeconnector-bucket-123456789012.

  1. Mở thùng và chọn Tải lên.
  2. Chọn tệp .jar mà bạn đã tải xuống từ kho GitHub và chọn Tải lên.

Bảng điều khiển tải lên tệp S3

Tạo một plugin tùy chỉnh

Bây giờ chúng tôi có mã ứng dụng của mình trong Amazon S3. Bước tiếp theo, chúng tôi tạo một plugin tùy chỉnh trong Kết nối Amazon MSK. Hoàn thành các bước sau:

  1. Trên bảng điều khiển Amazon MSK, chọn plugin tùy chỉnh trong ngăn điều hướng dưới Kết nối MSK.
  2. Chọn Tạo plugin tùy chỉnh.
  3. Trong S3 URI – Đối tượng plugin tùy chỉnh, duyệt đến tập tin có tên kafka-eventbridge-sink-with-gsr-dependencies.jar trong nhóm S3 eventbridgeconnector-bucket-${AWS_ACCOUNT_ID} cho trình kết nối EventBridge.
  4. Trong Tên plugin tùy chỉnh, đi vào msk-eventBridge-sink-plugin-v1.
  5. Nhập mô tả tùy chọn.
  6. Chọn Tạo plugin tùy chỉnh.

Màn hình plugin kết nối MSK

  1. Đợi plugin chuyển sang trạng thái hoạt động.

Tạo trình kết nối

Hoàn thành các bước sau để tạo trình kết nối trong MSK Connect:

  1. Trên bảng điều khiển Amazon MSK, chọn Kết nối trong ngăn điều hướng dưới Kết nối MSK.
  2. Chọn Tạo trình kết nối.
  3. Chọn Sử dụng plugin tùy chỉnh hiện có và dưới plugin tùy chỉnh, chọn plugin msk-eventBridge-sink-plugin-v1 mà bạn đã tạo trước đó.
  4. Chọn Sau.
  5. Trong Tên trình kết nối, đi vào msk-eventBridge-sink-connector.
  6. Nhập mô tả tùy chọn.
  7. Trong cụm kiểu, lựa chọn cụm MSK.
  8. Trong cụm MSK, hãy chọn cụm mà bạn đã tạo trước đó.
  9. Trong Xác thực, chọn IAM.
  10. Theo Cấu hình trình kết nối, hãy nhập các cài đặt sau (để biết thêm chi tiết về cấu hình, hãy xem phần Kho GitHub):
    auto.offset.reset=earliest
    connector.class=software.amazon.event.kafkaconnector.EventBridgeSinkConnector
    topics=notifications
    aws.eventbridge.connector.id=avro-test-connector
    aws.eventbridge.eventbus.arn=arn:aws:events:us-east-1:123456789012:event-bus/eventbridge-sink-eventbus
    aws.eventbridge.region=us-east-1
    tasks.max=1
    key.converter=org.apache.kafka.connect.storage.StringConverter
    value.converter=com.amazonaws.services.schemaregistry.kafkaconnect.AWSKafkaAvroConverter
    value.converter.region=us-east-1
    value.converter.registry.name=default-registry
    value.converter.avroRecordType=GENERIC_RECORD

  11. Hãy chắc chắn để replace aws.eventbridge.eventbus.arn, aws.eventbridge.regionvalue.converter.region với các giá trị từ ngăn xếp tiên quyết.
  12. Trong tạp chí Dung lượng đầu nối phần, chọn Tự động chia tỷ lệ cho loại công suất.
  13. Để lại giá trị mặc định là 1 cho Số lượng MCU trên mỗi công nhân.
  14. Giữ tất cả các giá trị mặc định cho Dung lượng đầu nối.
  15. Trong cấu hình công nhân, lựa chọn Sử dụng cấu hình mặc định của MSK.
  16. Theo Quyền truy cập, chọn vai trò IAM tùy chỉnh KafkaEventBridgeSinkStack-connectorRole, mà bạn đã tạo trong quá trình triển khai ngăn xếp AWS CDK.
  17. Chọn Sau.
  18. Chọn Sau một lần nữa.
  19. Trong Nhật ký giao hàng, lựa chọn Cung cấp cho Amazon CloudWatch Logs.
  20. Trong Nhóm nhật ký, chọn /aws/mskconnect/eventBridgeSinkConnector.
  21. Chọn Sau.
  22. Theo Xem lại và Tạo, xác thực tất cả các cài đặt và chọn Tạo trình kết nối.

Trình kết nối bây giờ sẽ ở trạng thái Tạo. Có thể mất tới vài phút để trình kết nối chuyển sang trạng thái Chạy.

Tạo quy tắc EventBridge

Giờ đây, trình kết nối đang chuyển tiếp các sự kiện đến EventBridge, chúng ta có thể sử dụng các quy tắc EventBridge để lọc và gửi sự kiện đến các mục tiêu khác. Hoàn thành các bước sau để tạo quy tắc:

  1. Trên bảng điều khiển EventBridge, chọn Nội quy trong khung điều hướng.
  2. Chọn Tạo quy tắc.
  3. đăng ký hạng mục thi eb-to-cloudwatch-logs-and-webhook cho Họ tên.
  4. Chọn eventbridge-sink-eventbus cho xe buýt sự kiện.
  5. Chọn Sau.
  6. Chọn Mẫu tùy chỉnh (trình soạn thảo JSON), chọn Chènvà thay thế mẫu sự kiện bằng mã sau:
    { "detail": { "value": { "eventType": ["suspiciousActivity"], "source": ["transactionAnalyzer"] } }, "detail-type": [{ "prefix": "kafka-connect-notification" }]
    }
    

  7. Chọn Sau.
  8. Trong Mục tiêu 1, lựa chọn Nhóm nhật ký CloudWatch và nhập kafka-events cho Nhật ký nhóm.
  9. Chọn Thêm mục tiêu khác.
  10. (Tùy chọn: Tạo đích API) Dành cho Mục tiêu 2, lựa chọn Đích API EventBridge cho loại mục tiêu.
  11. Chọn Tạo đích API mới.
  12. Nhập tên mô tả cho Họ tên.
  13. Thêm URL và nhập nó dưới dạng Điểm cuối đích API. (Đây có thể là URL của điểm cuối Datadog, Salesforce, v.v. của bạn)
  14. Chọn POST cho Phương thức HTTP.
  15. Chọn Tạo một kết nối mới cho Kết nối.
  16. Trong Tên kết nối, nhập tên.
  17. Chọn Nền tảng khác as Loại điểm đến và chọn API Key as Loại ủy quyền.
  18. Trong Tên khóa API Giá trị, nhập chìa khóa của bạn.
  19. Chọn Sau.
  20. Xác thực đầu vào của bạn và chọn Tạo quy tắc.

Quy tắc cầu sự kiện

Ảnh chụp màn hình sau đây của bảng điều khiển CloudWatch Logs hiển thị một số sự kiện từ EventBridge.

Nhật ký CloudWatch

Chạy trình kết nối trong sản xuất

Trong phần này, chúng ta đi sâu hơn vào các khía cạnh hoạt động của trình kết nối. Cụ thể, chúng tôi thảo luận về cách quy mô trình kết nối và cách giám sát nó bằng CloudWatch.

Chia tỷ lệ đầu nối

Trình kết nối Kafka mở rộng quy mô thông qua số lượng nhiệm vụ. Thiết kế mã của trình kết nối chìm EventBridge không giới hạn số lượng tác vụ mà nó có thể chạy. MSK Connect cung cấp khả năng tính toán để chạy các tác vụ, có thể từ được cung cấp or Tự động chia tỷ lệ kiểu. Trong quá trình triển khai Connector chúng ta chọn loại dung lượng Tự động chia tỷ lệ và 1 MCU cho mỗi nhân viên (đại diện cho 1vCPU và 4GiB bộ nhớ). Điều này có nghĩa là MSK Connect sẽ mở rộng cơ sở hạ tầng để chạy các tác vụ chứ không phải số lượng tác vụ. Số lượng nhiệm vụ được xác định bởi trình kết nối. Theo mặc định, trình kết nối sẽ bắt đầu với số lượng tác vụ được xác định trong task.max trong cấu hình trình kết nối. Nếu giá trị này cao hơn số lượng phân vùng của chủ đề được xử lý, số lượng tác vụ sẽ được đặt thành số lượng phân vùng trong quá trình tái cân bằng Kafka Connect.

Giám sát đầu nối

MSK Connect phát ra số liệu sang CloudWatch để theo dõi theo mặc định. Bên cạnh các số liệu MSK Connect, độ lệch của đầu nối cũng cần được theo dõi trong quá trình sản xuất. Việc theo dõi phần bù sẽ cung cấp thông tin chi tiết về liệu trình kết nối có thể theo kịp dữ liệu được tạo trong cụm Kafka hay không.

Làm sạch

Để dọn sạch tài nguyên của bạn và tránh bị tính phí liên tục, hãy hoàn thành các bước sau:

  1. Trên bảng điều khiển Amazon MSK, chọn Kết nối trong ngăn điều hướng dưới Kết nối MSK.
  2. Chọn các trình kết nối bạn đã tạo và chọn Xóa bỏ.
  3. Chọn Cụm trong khung điều hướng.
  4. Chọn cụm bạn đã tạo và chọn Xóa bỏ trên Hoạt động đơn.
  5. Trên bảng điều khiển EventBridge, chọn Nội quy trong khung điều hướng.
  6. Chọn xe buýt sự kiện eventbridge-sink-eventbus.
  7. Chọn tất cả các quy tắc bạn đã tạo và chọn Xóa bỏ.
  8. Xác nhận việc xóa bằng cách nhập xóa, sau đó chọn Xóa bỏ.

Nếu bạn đã triển khai ngăn xếp AWS CDK với ngữ cảnh PREREQ, hãy xóa tệp .jar cho trình kết nối.

  1. Trên bảng điều khiển Amazon S3, chọn trong khung điều hướng.
  2. Điều hướng đến nhóm nơi bạn đã tải trình kết nối của mình lên và xóa kafka-eventbridge-sink-with-gsr-dependencies.jar tập tin.

Độc lập với chế độ triển khai đã chọn, tất cả các tài nguyên AWS khác có thể bị xóa bằng cách sử dụng AWS CDK hoặc Hình thành đám mây AWS. Chạy cdk destroy khỏi thư mục kho lưu trữ để xóa ngăn xếp CloudFormation.

Ngoài ra, trên bảng điều khiển AWS CloudFormation, hãy chọn ngăn xếp KafkaEventBridgeSinkStack Và chọn Xóa bỏ.

Kết luận

Trong bài đăng này, chúng tôi đã hướng dẫn cách bạn có thể sử dụng MSK Connect để chạy trình kết nối Kafka nguồn mở AWS cho EventBridge, cách định cấu hình trình kết nối để chuyển tiếp chủ đề Kafka tới EventBridge và cách sử dụng quy tắc EventBridge để lọc và chuyển tiếp sự kiện tới CloudWatch Nhật ký và webhook.

Để tìm hiểu thêm về trình kết nối Kafka cho EventBridge, hãy tham khảo Amazon EventBridge công bố trình kết nối nguồn mở cho Kafka Connect, Cũng như các Hướng dẫn dành cho nhà phát triển MSK Connect và mã cho đầu nối trên Repo GitHub.


Về các tác giả

Florian Mair là Kiến trúc sư giải pháp cấp cao và chuyên gia truyền dữ liệu tại AWS. Anh là chuyên gia công nghệ giúp khách hàng ở Đức thành công và đổi mới bằng cách giải quyết các thách thức kinh doanh bằng cách sử dụng dịch vụ Đám mây AWS. Ngoài công việc là Kiến trúc sư Giải pháp, Florian còn là một nhà leo núi đam mê và đã leo lên một số ngọn núi cao nhất trên khắp Châu Âu.

Benjamin Meyer là Kiến trúc sư giải pháp cấp cao tại AWS, tập trung vào các doanh nghiệp Trò chơi ở Đức để giải quyết các thách thức kinh doanh bằng cách sử dụng dịch vụ Đám mây AWS. Benjamin là một nhà công nghệ đam mê công nghệ trong 7 năm và khi không giúp đỡ khách hàng, người ta có thể phát hiện ra anh ấy đang phát triển ứng dụng di động, chế tạo thiết bị điện tử hoặc chăm sóc xương rồng của mình.

tại chỗ_img

Tin tức mới nhất

tại chỗ_img