Logo Zephyrnet

Crea architetture basate sugli eventi con Amazon MSK e Amazon EventBridge | Servizi Web di Amazon

Data:

Basate su fatti (eventi) immutabili, le architetture guidate dagli eventi (EDA) consentono alle aziende di acquisire informazioni più approfondite sul comportamento dei propri clienti, sbloccando processi decisionali più accurati e rapidi che portano a una migliore esperienza del cliente. Nelle EDA, i moderni broker di eventi, come Amazon EventBridge e Apache Kafka, svolgono un ruolo chiave per pubblicare e iscriversi agli eventi. EventBridge è un bus di eventi serverless che acquisisce dati dalle tue app, app SaaS (Software as a Service) e servizi AWS e instrada tali dati alle destinazioni. Sebbene vi sia una sovrapposizione nel loro ruolo di spina dorsale delle EDA, entrambe le soluzioni sono emerse da diverse dichiarazioni di problemi e forniscono caratteristiche uniche per risolvere casi d'uso specifici. Con una solida conoscenza di entrambe le tecnologie e dei loro casi d'uso principali, gli sviluppatori possono creare EDA facili da usare, gestibili ed evolutivi.

Se il caso d'uso è ben definito e si associa direttamente a un bus di eventi, come streaming di eventi e analisi con eventi in streaming (Kafka) o integrazione di applicazioni con filtraggio, trasformazione e instradamento di eventi semplificati e coerenti su eventi discreti (EventBridge), la decisione per una particolare tecnologia del broker è semplice. Tuttavia, le organizzazioni e i requisiti aziendali sono spesso più complessi e vanno oltre le capacità di una tecnologia di broker. In quasi ogni caso, la scelta di un broker di eventi non dovrebbe essere una decisione binaria. Combinare tecnologie di broker complementari e abbracciare i loro punti di forza unici è un approccio solido per costruire EDA facili da usare, manutenibili ed evolutivi. Per rendere l'integrazione tra Kafka ed EventBridge ancora più fluida, AWS ha reso open source il connettore EventBridge basato su Apache Kafka. Ciò consente di sfruttare le distribuzioni Kafka locali ed evitare la comunicazione punto a punto, utilizzando al tempo stesso le conoscenze e il set di strumenti esistenti di Kafka Connect.

Le applicazioni di streaming consentono calcoli con stato su set di dati non associati. Ciò consente casi d'uso in tempo reale come il rilevamento di anomalie, calcoli in tempo di evento e molto altro. Queste applicazioni possono essere create utilizzando framework come Apache Flink, Apache Spark o Kafka Streams. Sebbene alcuni di questi framework supportino l'invio di eventi a sistemi downstream diversi da Apache Kafka, non esiste un modo standardizzato per farlo tra i framework. Richiederebbe a ciascun proprietario dell'applicazione di creare la propria logica per inviare eventi a valle. In un EDA, il modo preferito per gestire uno scenario di questo tipo è pubblicare eventi su un bus di eventi e quindi inviarli a valle.

Esistono due modi per inviare eventi da Apache Kafka a EventBridge: il metodo preferito è utilizzare Tubi Amazon EventBridge o il connettore sink EventBridge per Kafka Connect. In questo post esploriamo quando utilizzare quale opzione e come creare un EDA utilizzando il connettore sink EventBridge e Streaming gestito da Amazon per Apache Kafka (AmazonMSK).

Connettore sink EventBridge e tubi EventBridge

EventBridge Pipes collega le origini alle destinazioni con un'integrazione punto a punto, supportando il filtraggio degli eventi, le trasformazioni, l'arricchimento e la distribuzione di eventi a oltre 14 servizi AWS e destinazioni esterne basate su HTTPS utilizzando destinazioni API. Questo è il metodo preferito e più semplice per inviare eventi da Kafka a EventBridge poiché semplifica la configurazione e le operazioni con una piacevole esperienza per gli sviluppatori.

In alternativa, nelle seguenti circostanze potresti voler scegliere il connettore sink EventBridge per inviare eventi da Kafka direttamente ai bus di eventi EventBridge:

  • Hai già investito in processi e strumenti attorno al framework Kafka Connect come piattaforma di tua scelta da integrare con altri sistemi e servizi
  • È necessario eseguire l'integrazione con un registro di schemi compatibile con Kafka, ad esempio il Registro dello schema di AWS Glue, che supporta i formati di dati Avro e Protobuf per la serializzazione e deserializzazione degli eventi
  • Desideri inviare eventi dagli ambienti Kafka locali direttamente ai bus di eventi EventBridge

Panoramica della soluzione

In questo post ti mostriamo come utilizzare Kafka Connect e il connettore sink EventBridge per inviare eventi serializzati Avro da Streaming gestito da Amazon per Apache Kafka (Amazon MSK) a EventBridge. Ciò consente un flusso di dati fluido e coerente da Apache Kafka a decine di target EventBridge AWS e partner supportati, come Amazon CloudWatch, Amazon SQS, AWS Lambda e target HTTPS come Salesforce, Datadog e Snowflake utilizzando destinazioni API EventBridge. Il diagramma seguente illustra l'architettura basata sugli eventi utilizzata in questo post del blog basata su Amazon MSK ed EventBridge.

Diagramma di architettura

Il flusso di lavoro è costituito dai seguenti passaggi:

  1. L'applicazione demo genera transazioni con carta di credito, che vengono inviate ad Amazon MSK utilizzando il formato Avro.
  2. Un'applicazione di analisi in esecuzione su Amazon Elastic Container Service (Amazon ECS) consuma le transazioni e le analizza se si verifica un'anomalia.
  3. Se viene rilevata un'anomalia, l'applicazione invia un evento di rilevamento delle frodi all'argomento di notifica MSK.
  4. Il connettore EventBridge utilizza gli eventi di rilevamento delle frodi da Amazon MSK in formato Avro.
  5. Il connettore converte gli eventi in JSON e li invia a EventBridge.
  6. In EventBridge utilizziamo le regole di filtro JSON per filtrare i nostri eventi e inviarli ad altri servizi o altro Bus degli eventi. In questo esempio vengono inviati gli eventi di rilevamento delle frodi Log di Amazon CloudWatch per l'auditing e l'introspezione e a un fornitore SaaS di terze parti per mostrare quanto sia facile l'integrazione con API di terze parti, come Salesforce.

Prerequisiti

Per questa procedura dettagliata, è necessario disporre dei seguenti prerequisiti:

Distribuisci lo stack AWS CDK

Questa procedura dettagliata richiede la distribuzione di uno stack AWS CDK sul tuo account. Puoi distribuire l'intero stack end-to-end o solo le risorse necessarie da seguire insieme a questo post.

  1. Nel tuo terminale, esegui il seguente comando:
    git clone https://github.com/awslabs/eventbridge-kafka-connector/

  2. Passare alla directory cdk:
    cd eventbridge-kafka-connector/cdk

  3. Distribuisci lo stack AWS CDK in base alle tue preferenze:
  4. Se vuoi vedere la configurazione completa spiegata in questo post, esegui il seguente comando:
    cdk deploy —context deployment=FULL

  5. Se desideri distribuire il connettore autonomamente ma disponi già delle risorse necessarie, incluso il cluster MSK, Gestione dell'identità e dell'accesso di AWS (IAM), gruppi di sicurezza, generatore di dati e così via, esegui il comando seguente:
    cdk deploy —context deployment=PREREQ

Distribuisci il connettore sink EventBridge su Amazon MSK Connect

Se hai distribuito lo stack CDK in modalità COMPLETA, puoi saltare questa sezione e passare a Crea regole EventBridge.

Il connettore necessita di un ruolo IAM che consenta di leggere i dati dal cluster MSK e inviare record downstream a EventBridge.

Carica il codice del connettore su Amazon S3

Completa i seguenti passaggi per caricare il codice del connettore Servizio di archiviazione semplice Amazon (Amazon S3):

  1. Passare alla Repository GitHub.
  2. Scaricare la versione 1.0.0 con le dipendenze di AWS Glue Schema Registry incluse.
  3. Sulla console Amazon S3, scegli Secchi nel pannello di navigazione.
  4. Scegli Crea un secchio.
  5. Nel Nome del secchio, accedere eventbridgeconnector-bucket-${AWS_ACCOUNT_ID}.

Poiché i bucket S3 devono essere univoci a livello globale, sostituirli ${AWS_ACCOUNT_ID} con il tuo ID account AWS effettivo. Per esempio, eventbridgeconnector-bucket-123456789012.

  1. Apri il secchio e scegli Caricare.
  2. Seleziona il file .jar che hai scaricato dal repository GitHub e scegli Caricare.

Console di caricamento file S3

Crea un plugin personalizzato

Ora abbiamo il codice della nostra applicazione in Amazon S3. Come passaggio successivo, creiamo un plugin personalizzato in Amazon MSK Connect. Completa i seguenti passaggi:

  1. Sulla console Amazon MSK, scegli Plugin personalizzati nel riquadro di navigazione sotto Connessione MSK.
  2. Scegli Crea plug-in personalizzato.
  3. Nel URI S3: oggetto plug-in personalizzato, individuare il file denominato kafka-eventbridge-sink-with-gsr-dependencies.jar nel secchio S3 eventbridgeconnector-bucket-${AWS_ACCOUNT_ID} per il connettore EventBridge.
  4. Nel Nome del plug-in personalizzato, accedere msk-eventBridge-sink-plugin-v1.
  5. Inserisci una descrizione facoltativa.
  6. Scegli Crea plug-in personalizzato.

Schermata del plug-in MSK Connect

  1. Attendi che il plugin passi allo stato Attivo.

Crea un connettore

Completa i seguenti passaggi per creare un connettore in MSK Connect:

  1. Sulla console Amazon MSK, scegli Connettori RF nel riquadro di navigazione sotto Connessione MSK.
  2. Scegli Crea connettore.
  3. Seleziona Utilizza il plug-in personalizzato esistente e sotto Plugin personalizzati, seleziona il plug-in msk-eventBridge-sink-plugin-v1 che hai creato in precedenza.
  4. Scegli Avanti.
  5. Nel Nome del connettore, accedere msk-eventBridge-sink-connector.
  6. Inserisci una descrizione facoltativa.
  7. Nel Cluster Digitare, selezionare Cluster MSK.
  8. Nel Cluster MSK, seleziona il cluster creato in precedenza.
  9. Nel Autenticazionescegli IAM.
  10. Sotto Configurazioni dei connettori, inserire le seguenti impostazioni (per maggiori dettagli sulla configurazione consultare il Repository 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. Assicurati che replace aws.eventbridge.eventbus.arn, aws.eventbridge.regione value.converter.region con i valori dello stack dei prerequisiti.
  12. Nel Capacità del connettore sezione, selezionare Scalato automaticamente per Tipo di capacità.
  13. Lasciare il valore predefinito 1 per Conteggio MCU per lavoratore.
  14. Mantieni tutti i valori predefiniti per Capacità del connettore.
  15. Nel Configurazione lavoratore, selezionare Utilizza la configurazione predefinita di MSK.
  16. Sotto Autorizzazioni di accesso, scegli il ruolo IAM personalizzato KafkaEventBridgeSinkStack-connectorRole, creato durante la distribuzione dello stack AWS CDK.
  17. Scegli Avanti.
  18. Scegli Avanti nuovamente.
  19. Nel Consegna del registro, selezionare Consegna ad Amazon CloudWatch Logs.
  20. Nel Gruppo di registroscegli /aws/mskconnect/eventBridgeSinkConnector.
  21. Scegli Avanti.
  22. Sotto Rivedi e crea, convalidare tutte le impostazioni e scegliere Crea connettore.

Il connettore sarà ora nello stato Creazione. Potrebbero essere necessari diversi minuti prima che il connettore passi allo stato corsa.

Crea regole EventBridge

Ora che il connettore inoltra gli eventi a EventBridge, possiamo utilizzare le regole EventBridge per filtrare e inviare eventi ad altre destinazioni. Completa i seguenti passaggi per creare una regola:

  1. Nella console EventBridge, scegli Regole nel pannello di navigazione.
  2. Scegli Crea regola.
  3. entrare eb-to-cloudwatch-logs-and-webhook per Nome.
  4. Seleziona eventbridge-sink-eventbus per Autobus per eventi.
  5. Scegli Avanti.
  6. Seleziona Modello personalizzato (editor JSON)scegli inseriree sostituire il modello di evento con il seguente codice:
    { "detail": { "value": { "eventType": ["suspiciousActivity"], "source": ["transactionAnalyzer"] } }, "detail-type": [{ "prefix": "kafka-connect-notification" }]
    }
    

  7. Scegli Avanti.
  8. Nel Target 1, selezionare Gruppo di log di CloudWatch ed entra kafka-events per Gruppo di registro.
  9. Scegli Aggiungi un altro obiettivo.
  10. (Opzionale: Crea una destinazione API) Per Target 2, selezionare Destinazione API EventBridge per Tipi di bersaglio.
  11. Seleziona Crea una nuova destinazione API.
  12. Inserisci un nome descrittivo per Nome.
  13. Aggiungi l'URL e inseriscilo come Endpoint di destinazione API. (Può essere l'URL del tuo endpoint Datadog, Salesforce, ecc.)
  14. Seleziona POST per Metodo HTTP.
  15. Seleziona Crea una nuova connessione per Connessione.
  16. Nel Nome connessione, inserisci un nome.
  17. Seleziona Altro as Tipo di destinazione e seleziona API Key as Tipo di autorizzazione.
  18. Nel Nome della chiave API ed Valore, inserisci le tue chiavi.
  19. Scegli Avanti.
  20. Convalida i tuoi input e scegli Crea regola.

Regola EventBridge

Lo screenshot seguente della console CloudWatch Logs mostra diversi eventi da EventBridge.

Log di CloudWatch

Eseguire il connettore in produzione

In questa sezione approfondiamo gli aspetti operativi del connettore. Nello specifico, discuteremo della scalabilità del connettore e di come monitorarlo utilizzando CloudWatch.

Ridimensionare il connettore

I connettori Kafka si adattano al numero di attività. La progettazione del codice del connettore sink EventBridge non limita il numero di attività che può eseguire. MSK Connect fornisce la capacità di calcolo per eseguire le attività, che possono provenire da Fornito or Scalato automaticamente tipo. Durante la distribuzione del connettore, scegliamo il tipo di capacità Scalato automaticamente e 1 MCU per lavoratore (che rappresenta 1vCPU e 4GiB di memoria). Ciò significa che MSK Connect ridimensionerà l'infrastruttura per eseguire attività ma non il numero di attività. Il numero di attività è definito dal connettore. Per impostazione predefinita, il connettore inizierà con il numero di attività definite in task.max nella configurazione del connettore. Se questo valore è superiore al conteggio delle partizioni dell'argomento elaborato, il numero di attività verrà impostato sul numero di partizioni durante il ribilanciamento di Kafka Connect.

Monitorare il connettore

MSK Connect emette parametri a CloudWatch per il monitoraggio per impostazione predefinita. Oltre alle metriche MSK Connect, anche l'offset del connettore dovrebbe essere monitorato in produzione. Il monitoraggio dell'offset fornisce informazioni sulla capacità del connettore di tenere il passo con i dati prodotti nel cluster Kafka.

ripulire

Per ripulire le risorse ed evitare spese correnti, completare i seguenti passaggi:

  1. Sulla console Amazon MSK, scegli Connettori RF nel riquadro di navigazione sotto Connessione MSK.
  2. Seleziona i connettori che hai creato e scegli Elimina.
  3. Scegli Cluster nel pannello di navigazione.
  4. Seleziona il cluster che hai creato e scegli Elimina sul Azioni menu.
  5. Nella console EventBridge, scegli Regole nel pannello di navigazione.
  6. Scegli il bus degli eventi eventbridge-sink-eventbus.
  7. Seleziona tutte le regole che hai creato e scegli Elimina.
  8. Conferma la rimozione inserendo Elimina, quindi scegli Elimina.

Se hai distribuito lo stack AWS CDK con il contesto PREREQ, elimina il file .jar per il connettore.

  1. Sulla console Amazon S3, scegli Secchi nel pannello di navigazione.
  2. Passa al bucket in cui hai caricato il connettore ed elimina il file kafka-eventbridge-sink-with-gsr-dependencies.jar file.

Indipendentemente dalla modalità di distribuzione scelta, tutte le altre risorse AWS possono essere eliminate utilizzando AWS CDK o AWS CloudFormazione. Correre cdk destroy dalla directory del repository per eliminare lo stack CloudFormation.

In alternativa, nella console AWS CloudFormation, seleziona lo stack KafkaEventBridgeSinkStack e scegli Elimina.

Conclusione

In questo post, abbiamo mostrato come utilizzare MSK Connect per eseguire il connettore Kafka open source AWS per EventBridge, come configurare il connettore per inoltrare un argomento Kafka a EventBridge e come utilizzare le regole EventBridge per filtrare e inoltrare eventi a CloudWatch Log e un webhook.

Per ulteriori informazioni sul connettore Kafka per EventBridge, fare riferimento a Amazon EventBridge annuncia il connettore open source per Kafka Connect, Nonché Guida per sviluppatori MSK Connect e il codice del connettore sul Repository GitHub.


Informazioni sugli autori

Florian Mair è un Senior Solutions Architect ed esperto di streaming di dati presso AWS. È un esperto di tecnologia che aiuta i clienti in Germania ad avere successo e a innovare risolvendo le sfide aziendali utilizzando i servizi cloud AWS. Oltre a lavorare come Solutions Architect, Florian è un appassionato alpinista e ha scalato alcune delle montagne più alte d'Europa.

Benjamin Mayer è un Senior Solutions Architect presso AWS, focalizzato sulle attività di gioco in Germania per risolvere le sfide aziendali utilizzando i servizi cloud AWS. Benjamin è un appassionato tecnologo da 7 anni e, quando non aiuta i clienti, lo si può trovare a sviluppare app mobili, costruire dispositivi elettronici o prendersi cura dei suoi cactus.

spot_img

L'ultima intelligenza

spot_img