Zephyrnet-logo

Bouw gebeurtenisgestuurde architecturen met Amazon MSK en Amazon EventBridge | Amazon-webservices

Datum:

Gebaseerd op onveranderlijke feiten (gebeurtenissen), stellen gebeurtenisgestuurde architecturen (EDA's) bedrijven in staat dieper inzicht te krijgen in het gedrag van hun klanten, waardoor nauwkeurigere en snellere besluitvormingsprocessen worden ontgrendeld die tot betere klantervaringen leiden. In EDA's zijn moderne evenementenmakelaars, zoals Amazon EventBridge en Apache Kafka spelen een sleutelrol bij het publiceren van en zich abonneren op evenementen. EventBridge is een serverloze gebeurtenisbus die gegevens van uw eigen apps, SaaS-apps (Software as a Service) en AWS-services opneemt en die gegevens naar doelen routeert. Hoewel er overlap is in hun rol als ruggengraat in EDA's, zijn beide oplossingen voortgekomen uit verschillende probleemstellingen en bieden ze unieke functies om specifieke gebruiksscenario's op te lossen. Met een goed begrip van beide technologieën en hun primaire gebruiksscenario's kunnen ontwikkelaars eenvoudig te gebruiken, onderhoudbare en evolueerbare EDA's creëren.

Als de use case goed is gedefinieerd en rechtstreeks is toegewezen aan één gebeurtenisbus, zoals gebeurtenisstreaming en -analyse met streaminggebeurtenissen (Kafka) of applicatie-integratie met vereenvoudigde en consistente gebeurtenisfiltering, transformatie en routering op discrete gebeurtenissen (EventBridge), kan de beslissing voor een bepaalde makelaar is de technologie eenvoudig. Organisaties en zakelijke vereisten zijn echter vaak complexer en vallen buiten de mogelijkheden van één makelaarstechnologie. In vrijwel ieder geval mag het kiezen van een evenementenmakelaar geen binaire beslissing zijn. Het combineren van complementaire makelaarstechnologieën en het omarmen van hun unieke sterke punten is een solide aanpak om gebruiksvriendelijke, onderhoudbare en evolueerbare EDA's te bouwen. Om de integratie tussen Kafka en EventBridge nog soepeler te laten verlopen, heeft AWS de EventBridge Connector op basis van Apache Kafka open source gemaakt. Hierdoor kunt u profiteren van on-premises Kafka-implementaties en point-to-point-communicatie vermijden, terwijl u de bestaande kennis en toolset van Kafka Connect gebruikt.

Streamingtoepassingen maken stateful berekeningen over ongebonden datasets mogelijk. Dit maakt real-time gebruiksscenario's mogelijk, zoals detectie van afwijkingen, berekeningen op gebeurtenistijd en nog veel meer. Deze applicaties kunnen worden gebouwd met behulp van frameworks zoals Apache Flink, Apache Spark of Kafka Streams. Hoewel sommige van deze raamwerken het verzenden van gebeurtenissen naar andere downstream-systemen dan Apache Kafka ondersteunen, bestaat er geen gestandaardiseerde manier om dit binnen alle raamwerken te doen. Elke toepassingseigenaar zou zijn eigen logica moeten bouwen om gebeurtenissen stroomafwaarts te verzenden. In een EDA is de voorkeursmanier om met een dergelijk scenario om te gaan het publiceren van gebeurtenissen naar een gebeurtenisbus en deze vervolgens stroomafwaarts te sturen.

Er zijn twee manieren om gebeurtenissen van Apache Kafka naar EventBridge te verzenden: gebruik de voorkeursmethode Amazon EventBridge-buizen of de EventBridge-sinkconnector voor Kafka Connect. In dit bericht onderzoeken we wanneer we welke optie moeten gebruiken en hoe we een EDA kunnen bouwen met behulp van de EventBridge-sinkconnector en Amazon Managed Streaming voor Apache Kafka (Amazone MSK).

EventBridge-gootsteenconnector versus EventBridge-buizen

EventBridge Pipes verbindt bronnen met doelen met een point-to-point-integratie en ondersteunt gebeurtenisfiltering, transformaties, verrijking en gebeurtenislevering aan meer dan 14 AWS-services en externe HTTPS-gebaseerde doelen met behulp van API Destinations. Dit is de geprefereerde en gemakkelijkste methode om evenementen van Kafka naar EventBridge te verzenden, omdat het de installatie en bewerkingen vereenvoudigt en een geweldige ontwikkelaarservaring biedt.

Als alternatief kunt u onder de volgende omstandigheden de EventBridge-sinkconnector kiezen om gebeurtenissen van Kafka rechtstreeks naar EventBridge-evenementbussen te verzenden:

  • Je hebt al geïnvesteerd in processen en tools rond het Kafka Connect-framework als het platform van jouw keuze om te integreren met andere systemen en diensten
  • U moet integreren met een Kafka-compatibel schemaregister, bijvoorbeeld de AWS Lijm Schema Register, ondersteunt Avro- en Protobuf-gegevensformaten voor serialisatie en deserialisatie van gebeurtenissen
  • U wilt gebeurtenissen vanuit on-premises Kafka-omgevingen rechtstreeks naar EventBridge Event Buses verzenden

Overzicht van de oplossing

In dit bericht laten we u zien hoe u Kafka Connect en de EventBridge-sink-connector kunt gebruiken om Avro-seriële gebeurtenissen te verzenden vanaf Door Amazon beheerde streaming voor Apache Kafka (Amazon MSK) naar EventBridge. Dit maakt een naadloze en consistente gegevensstroom mogelijk van Apache Kafka naar tientallen ondersteunde EventBridge AWS- en partnerdoelen, zoals Amazon CloudWatch, Amazon SQS, AWS Lambda en HTTPS-doelen zoals Salesforce, Datadog en Snowflake met behulp van EventBridge API-bestemmingen. Het volgende diagram illustreert de gebeurtenisgestuurde architectuur die in deze blogpost wordt gebruikt, op basis van Amazon MSK en EventBridge.

Architectuurdiagram

De workflow bestaat uit de volgende stappen:

  1. De demo-applicatie genereert creditcardtransacties, die in het Avro-formaat naar Amazon MSK worden verzonden.
  2. Een analysetoepassing die draait op Amazon Elastic Container Service (Amazon ECS) gebruikt de transacties en analyseert deze als er een afwijking is.
  3. Als er een afwijking wordt gedetecteerd, verzendt de toepassing een fraudedetectiegebeurtenis terug naar het MSK-meldingsonderwerp.
  4. De EventBridge-connector gebruikt de fraudedetectiegebeurtenissen van Amazon MSK in Avro-indeling.
  5. De connector converteert de gebeurtenissen naar JSON en verzendt deze naar EventBridge.
  6. In EventBridge gebruiken we JSON-filterregels om onze evenementen te filteren en naar andere services of een andere te sturen Evenementenbus. In dit voorbeeld worden fraudedetectiegebeurtenissen verzonden naar Amazon CloudWatch-logboeken voor auditing en introspectie, en aan een externe SaaS-provider om te laten zien hoe eenvoudig het is om te integreren met API's van derden, zoals Salesforce.

Voorwaarden

Voor deze walkthrough moet u aan de volgende vereisten voldoen:

Implementeer de AWS CDK-stack

Voor deze walkthrough moet u een AWS CDK-stack op uw account implementeren. U kunt de volledige stapel end-to-end inzetten of alleen de benodigde bronnen om mee te doen met dit bericht.

  1. Voer in uw terminal de volgende opdracht uit:
    git clone https://github.com/awslabs/eventbridge-kafka-connector/

  2. Navigeer naar de cdk-map:
    cd eventbridge-kafka-connector/cdk

  3. Implementeer de AWS CDK-stack op basis van uw voorkeuren:
  4. Als je de volledige installatie in dit bericht wilt zien, voer je de volgende opdracht uit:
    cdk deploy —context deployment=FULL

  5. Als u de connector zelf wilt implementeren maar al over de vereiste bronnen beschikt, inclusief het MSK-cluster, AWS Identiteits- en toegangsbeheer (IAM)-rollen, beveiligingsgroepen, gegevensgenerator, enzovoort, voert u de volgende opdracht uit:
    cdk deploy —context deployment=PREREQ

Implementeer de EventBridge-sinkconnector op Amazon MSK Connect

Als u de CDK-stack in de FULL-modus hebt geïmplementeerd, kunt u deze sectie overslaan en verdergaan Maak EventBridge-regels.

De connector heeft een IAM-rol nodig waarmee de gegevens van het MSK-cluster kunnen worden gelezen en records stroomafwaarts naar EventBridge kunnen worden verzonden.

Upload connectorcode naar Amazon S3

Voer de volgende stappen uit om de connectorcode te uploaden naar Amazon eenvoudige opslagservice (Amazone S3):

  1. Navigeer naar de GitHub repo.
  2. Downloaden de release 1.0.0 met de AWS Glue Schema Registry-afhankelijkheden inbegrepen.
  3. Kies op de Amazon S3-console Emmers in het navigatievenster.
  4. Kies Maak een bucket.
  5. Voor Bucketnaam, ga naar binnen eventbridgeconnector-bucket-${AWS_ACCOUNT_ID}.

Omdat S3-buckets wereldwijd uniek moeten zijn, vervangen ${AWS_ACCOUNT_ID} met uw werkelijke AWS-account-ID. Bijvoorbeeld, eventbridgeconnector-bucket-123456789012.

  1. Open de emmer en kies Uploaden.
  2. Selecteer het .jar-bestand dat u hebt gedownload uit de GitHub-repository en kies Uploaden.

S3-console voor het uploaden van bestanden

Maak een aangepaste plug-in

We hebben nu onze applicatiecode in Amazon S3. Als volgende stap maken we een aangepaste plug-in Amazon MSK Connect. Voer de volgende stappen uit:

  1. Kies op de Amazon MSK-console: Aangepaste plug-ins in het navigatievenster onder MSK-verbinding.
  2. Kies Maak een aangepaste plug-in.
  3. Voor S3 URI – Aangepast plug-inobject, blader naar het bestand met de naam kafka-eventbridge-sink-with-gsr-dependencies.jar in de S3-emmer eventbridgeconnector-bucket-${AWS_ACCOUNT_ID} voor de EventBridge-connector.
  4. Voor Aangepaste plug-innaam, ga naar binnen msk-eventBridge-sink-plugin-v1.
  5. Voer een optionele beschrijving in.
  6. Kies Maak een aangepaste plug-in.

MSK Connect-plug-inscherm

  1. Wacht tot de plug-in overgaat naar de status Actief.

Maak een connector

Voer de volgende stappen uit om een ​​connector te maken in MSK Connect:

  1. Kies op de Amazon MSK-console: Connectoren in het navigatievenster onder MSK-verbinding.
  2. Kies Verbinding maken.
  3. kies Gebruik bestaande aangepaste plug-in en onder Aangepaste plug-ins, selecteer de plug-in msk-eventBridge-sink-plugin-v1 die u eerder hebt gemaakt.
  4. Kies Volgende.
  5. Voor Connectornaam:, ga naar binnen msk-eventBridge-sink-connector.
  6. Voer een optionele beschrijving in.
  7. Voor TROS type dan: selecteer MSK-cluster.
  8. Voor MSK-clusters, selecteert u het cluster dat u eerder hebt gemaakt.
  9. Voor authenticatie, kiezen IAM.
  10. Onder Connectorconfiguraties, voer de volgende instellingen in (voor meer details over de configuratie, zie de GitHub-repository):
    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. Zorg ervoor dat replace aws.eventbridge.eventbus.arn, aws.eventbridge.region en value.converter.region met de waarden uit de vereiste stapel.
  12. In het Connector capaciteit sectie, selecteer Automatisch geschaald For Capaciteitstype.
  13. Laat de standaardwaarde 1 staan MCU-aantal per werknemer.
  14. Bewaar alle standaardwaarden voor Connector capaciteit.
  15. Voor Werknemer configuratieselecteer Gebruik de standaardconfiguratie van MSK.
  16. Onder Toegangsrechten, kiest u de aangepaste IAM-rol KafkaEventBridgeSinkStack-connectorRole, die u hebt gemaakt tijdens de implementatie van de AWS CDK-stack.
  17. Kies Volgende.
  18. Kies Volgende weer.
  19. Voor Levering van logboekenselecteer Leveren aan Amazon CloudWatch Logs.
  20. Voor Log groep, kiezen /aws/mskconnect/eventBridgeSinkConnector.
  21. Kies Volgende.
  22. Onder Beoordeel en maak, valideer alle instellingen en kies Verbinding maken.

De connector heeft nu de status Wij creëren. Het kan enkele minuten duren voordat de connector de status krijgt Hardlopen.

Maak EventBridge-regels

Nu de connector gebeurtenissen doorstuurt naar EventBridge, kunnen we EventBridge-regels gebruiken om gebeurtenissen te filteren en naar andere doelen te verzenden. Voer de volgende stappen uit om een ​​regel te maken:

  1. Kies op de EventBridge-console Reglement in het navigatievenster.
  2. Kies Creëer regel.
  3. Enter eb-to-cloudwatch-logs-and-webhook For Naam.
  4. Selecteer eventbridge-sink-eventbus voor Evenementenbus.
  5. Kies Volgende.
  6. kies Aangepast patroon (JSON-editor), kiezen Invoegenen vervang het gebeurtenispatroon door de volgende code:
    { "detail": { "value": { "eventType": ["suspiciousActivity"], "source": ["transactionAnalyzer"] } }, "detail-type": [{ "prefix": "kafka-connect-notification" }]
    }
    

  7. Kies Volgende.
  8. Voor Doel 1selecteer CloudWatch-logboekgroep en ga naar binnen kafka-events For Groep loggen.
  9. Kies Voeg nog een doel toe.
  10. (optioneel: Maak een API-bestemming) Voor Doel 2selecteer EventBridge API-bestemming For Doel typen.
  11. kies Maak een nieuwe API-bestemming.
  12. Voer een beschrijvende naam in voor Naam.
  13. Voeg de URL toe en voer deze in als API-bestemmingseindpunt. (Dit kan de URL zijn van uw Datadog-, Salesforce-, enz.-eindpunt)
  14. kies POST For HTTP-methode.
  15. kies Maak een nieuwe verbinding aan For Aansluiting.
  16. Voor Verbindingsnaam, voer een naam in.
  17. kies Overige as Bestemmingstype en selecteer API Key as Autorisatietype.
  18. Voor API-sleutelnaam en Waarde, voer uw sleutels in.
  19. Kies Volgende.
  20. Valideer uw invoer en kies Creëer regel.

EventBridge-regel

De volgende schermafbeelding van de CloudWatch Logs-console toont verschillende gebeurtenissen van EventBridge.

CloudWatch-logboeken

Voer de connector uit in productie

In deze sectie gaan we dieper in op de operationele aspecten van de connector. We bespreken specifiek hoe de connector schaalt en hoe u deze kunt monitoren met CloudWatch.

Schaal de connector

Kafka-connectoren schalen door het aantal taken. Het codeontwerp van de EventBridge-sinkconnector beperkt het aantal taken dat kan worden uitgevoerd niet. MSK Connect biedt de rekencapaciteit om de taken uit te voeren, waaruit kan worden gekozen Voorzien or Automatisch geschaald type. Tijdens de implementatie van de connector kiezen we het capaciteitstype Automatisch geschaald en 1 MCU per werker (wat 1vCPU en 4GiB geheugen vertegenwoordigt). Dit betekent dat MSK Connect de infrastructuur zal schalen om taken uit te voeren, maar niet het aantal taken. Het aantal taken wordt gedefinieerd door de connector. Standaard begint de connector met het aantal taken dat is gedefinieerd in taken.max in de connectorconfiguratie. Als deze waarde hoger is dan het aantal partities van het verwerkte onderwerp, wordt het aantal taken ingesteld op het aantal partities tijdens de herbalancering van Kafka Connect.

Houd de connector in de gaten

MSK Connect verzendt statistieken standaard naar CloudWatch voor monitoring. Naast MSK Connect-metrieken moet ook de offset van de connector tijdens de productie worden bewaakt. Het monitoren van de offset geeft inzicht of de connector de gegevens kan bijhouden die in het Kafka-cluster worden geproduceerd.

Opruimen

Voer de volgende stappen uit om uw bronnen op te schonen en doorlopende kosten te voorkomen:

  1. Kies op de Amazon MSK-console: Connectoren in het navigatievenster onder MSK-verbinding.
  2. Selecteer de connectoren die u hebt gemaakt en kies Verwijder.
  3. Kies Clusters in het navigatievenster.
  4. Selecteer het cluster dat u hebt gemaakt en kies Verwijder op de Acties menu.
  5. Kies op de EventBridge-console Reglement in het navigatievenster.
  6. Kies voor de evenementenbus eventbridge-sink-eventbus.
  7. Selecteer alle regels die u hebt gemaakt en kies Verwijder.
  8. Bevestig de verwijdering door verwijderen in te voeren en kies vervolgens Verwijder.

Als u de AWS CDK-stack met de context PREREQ hebt geïmplementeerd, verwijdert u het .jar-bestand voor de connector.

  1. Kies op de Amazon S3-console Emmers in het navigatievenster.
  2. Navigeer naar de bucket waarin u uw connector heeft geüpload en verwijder de kafka-eventbridge-sink-with-gsr-dependencies.jar bestand.

Onafhankelijk van de gekozen implementatiemodus kunnen alle andere AWS-bronnen worden verwijderd met behulp van AWS CDK of AWS CloudFormatie. Rennen cdk destroy uit de repositorymap om de CloudFormation-stack te verwijderen.

U kunt ook op de AWS CloudFormation-console de stapel selecteren KafkaEventBridgeSinkStack En kies Verwijder.

Conclusie

In dit bericht hebben we laten zien hoe u MSK Connect kunt gebruiken om de AWS open-source Kafka-connector voor EventBridge uit te voeren, hoe u de connector kunt configureren om een ​​Kafka-onderwerp door te sturen naar EventBridge, en hoe u EventBridge-regels kunt gebruiken om gebeurtenissen te filteren en door te sturen naar CloudWatch Logboeken en een webhook.

Voor meer informatie over de Kafka-connector voor EventBridge raadpleegt u Amazon EventBridge kondigt open-source connector voor Kafka Connect aanAlsmede de MSK Connect-ontwikkelaarsgids en de code voor de connector op de GitHub repo.


Over de auteurs

Florian Mair is een Senior Solutions Architect en datastreamingexpert bij AWS. Hij is een technoloog die klanten in Duitsland helpt succesvol te zijn en te innoveren door zakelijke uitdagingen op te lossen met behulp van AWS Cloud-services. Naast zijn werk als Solutions Architect is Florian een gepassioneerd bergbeklimmer en heeft hij enkele van de hoogste bergen van Europa beklommen.

Benjamin Meijer is een Senior Solutions Architect bij AWS, gericht op Games-bedrijven in Duitsland om zakelijke uitdagingen op te lossen door AWS Cloud-services te gebruiken. Benjamin is al zeven jaar een fervent technoloog en als hij geen klanten helpt, ontwikkelt hij mobiele apps, bouwt hij elektronica of verzorgt hij zijn cactussen.

spot_img

Laatste intelligentie

spot_img