

# Uso de Lambda con Apache Kafka autoadministrado
<a name="with-kafka"></a>

En este tema se describe cómo utilizar Lambda con un clúster de Kafka autoadministrado. En la terminología de AWS, un clúster autoadministrado incluye clústeres Kafka alojados que no son de AWS. Por ejemplo, puede alojar su clúster de Kafka con un proveedor de servicios en la nube, como [Confluent Cloud](https://www.confluent.io/confluent-cloud/) o [Redpanda](https://www.redpanda.com/).

En este capítulo se explica cómo utilizar un clúster de Apache Kafka autoadministrado como origen de eventos para su función de Lambda. El proceso general de integración de Apache Kafka autoadministrado con Lambda implica los siguientes pasos:

1. **[Configuración de clúster y red](with-kafka-cluster-network.md)**: primero, configure su clúster Apache Kafka autoadministrado con la configuración de red correcta para permitir que Lambda acceda a su clúster.

1. **[Configuración de la asignación de orígenes de eventos](with-kafka-configure.md)**: luego, cree el recurso de [asignación de orígenes de eventos](invocation-eventsourcemapping.md) que Lambda necesita para conectar de forma segura su clúster de Apache Kafka a su función.

1. **[Configuración de la función y los permisos](with-kafka-permissions.md)**: por último, asegúrese de que su función esté configurada correctamente y de que cuente con los permisos necesarios en su [rol de ejecución](lambda-intro-execution-role.md).

Apache Kafka como origen de eventos funciona de manera similar a utilizar Amazon Simple Queue Service (Amazon SQS) o Amazon Kinesis. Lambda sondea internamente nuevos mensajes del origen de eventos y luego invoca sincrónicamente la función de Lambda objetivo. Lambda lee los mensajes en lotes y los proporciona a su función como carga de eventos. El tamaño máximo del lote se puede configurar (el valor predeterminado son 100 mensajes). Para obtener más información, consulte [Comportamiento de procesamiento por lotes](invocation-eventsourcemapping.md#invocation-eventsourcemapping-batching).

Para optimizar el rendimiento de la asignación de orígenes de eventos de Apache Kafka autoadministrado, configure el modo aprovisionado. En el modo aprovisionado, puede definir el número mínimo y máximo de sondeos de eventos asignados a su asignación de orígenes de eventos. Esto puede mejorar la capacidad de la asignación de orígenes de eventos para manejar picos de mensajes inesperados. Para obtener más información, consulte [Modo aprovisionado](kafka-scaling-modes.md#kafka-provisioned-mode).

**aviso**  
Las asignaciones de orígenes de eventos de Lambda procesan cada evento al menos una vez, y puede producirse un procesamiento duplicado de registros. Para evitar posibles problemas relacionados con la duplicación de eventos, le recomendamos encarecidamente que haga que el código de la función sea idempotente. Para obtener más información, consulte [¿Cómo puedo hacer que mi función de Lambda sea idempotente?](https://repost.aws/knowledge-center/lambda-function-idempotent) en el Centro de conocimientos de AWS.

Para los orígenes de eventos basados en Kafka, Lambda admite parámetros de control de procesamiento, como los plazos de procesamiento por lotes y el tamaño del lote. Para obtener más información, consulte [Comportamiento de procesamiento por lotes](invocation-eventsourcemapping.md#invocation-eventsourcemapping-batching).

Para ver un ejemplo de cómo utilizar Kafka autoadministrado como origen de eventos, consulte [Uso de Apache Kafka autoalojado como origen de eventos para AWS Lambda](https://aws.amazon.com/blogs/compute/using-self-hosted-apache-kafka-as-an-event-source-for-aws-lambda/) en el blog de informática de AWS.

**Topics**
+ [Evento de ejemplo](#smaa-sample-event)
+ [Configuración del clúster Apache Kafka autoadministrado y de la red para Lambda](with-kafka-cluster-network.md)
+ [Configuración de permisos del rol de ejecución de Lambda](with-kafka-permissions.md)
+ [Configuración de Apache Kafka autoadministrado como origen de eventos para Lambda](with-kafka-configure.md)

## Evento de ejemplo
<a name="smaa-sample-event"></a>

Lambda envía el lote de mensajes en el parámetro de evento cuando invoca su función de Lambda. La carga de eventos contiene una matriz de mensajes. Cada elemento de la matriz contiene detalles del tema Kafka y el identificador de partición Kafka, junto con una marca de tiempo y un mensaje codificado en base64.

```
{
   "eventSource": "SelfManagedKafka",
   "bootstrapServers":"b-2.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092,b-1.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092",
   "records":{
      "mytopic-0":[
         {
            "topic":"mytopic",
            "partition":0,
            "offset":15,
            "timestamp":1545084650987,
            "timestampType":"CREATE_TIME",
            "key":"abcDEFghiJKLmnoPQRstuVWXyz1234==",
            "value":"SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==",
            "headers":[
               {
                  "headerKey":[
                     104,
                     101,
                     97,
                     100,
                     101,
                     114,
                     86,
                     97,
                     108,
                     117,
                     101
                  ]
               }
            ]
         }
      ]
   }
}
```