@aws-lambda-powertools/kafka

中文文档
2.36.0发布于 2026/10/06MIT-0TypeScriptESM + CJS构建来源已验证近 30 天下载 4881

在AWS Lambda函数中方便处理Kafka事件的信息去区域化和剖析的工具

中文使用文档
文档目录12 节
  1. 介绍
  2. 使用量
  3. 取消序列化
  4. 附加解析
  5. 贡献
  6. 路线图
  7. 连接
  8. 如何支持 AWS Lambda (TypeScript) 的 Powertools ?
  9. 成为参考客户
  10. 分享你的工作
  11. 使用 Lambda 层
  12. 许可证

AWS Lambda( TypeScript) - Kafka 工具

用于 AWS Lambda (TypeScript) 的 Powertools 是用于执行无服务器的开发者工具包 最佳做法和增加开发者的速度。 。 。 .

您可以在 TypeScript 和 JavaScript 代码基础中使用软件包.

介绍

卡夫卡消费者公用系统透明地处理信息去区域化,提供直观的开发者经验,并与其他动力工具无缝地融合,用于AWS Lambda生态系统.

使用量

要启动, 根据您想要使用的策略类型, 安装库和相应的库 :

JSON计划:

npm install @aws-lambda-powertools/kafka

对于Avro计划:

npm install @aws-lambda-powertools/kafka avro-js

对于Protobuf计划:

npm install @aws-lambda-powertools/kafka protobufjs

此外,如果想要使用输出解析 标准Schema,您可以安装 任何支持的库例如: Zod, Valibot, 或 ArkType.

取消序列化

卡夫卡消费者公用设施将生的卡夫卡事件转变为直观的处理格式. 要有效处理信件,您需要配置一个与您的数据格式相匹配的策略.

杰森·斯克马

import { SchemaType, kafkaConsumer } from '@aws-lambda-powertools/kafka';
import type { SchemaConfig } from '@aws-lambda-powertools/kafka/types';
import { Logger } from '@aws-lambda-powertools/logger';

const logger = new Logger({ serviceName: 'kafka-consumer' });

const schemaConfig = {
  value: {
    type: SchemaType.JSON,
  },
} satisfies SchemaConfig;

export const handler = kafkaConsumer(async (event, _context) => {
  for (const { value } of event.records) {
    logger.info('received value', { value });
  }
}, schemaConfig);

阿夫罗·斯克马

import { readFileSync } from 'node:fs';
import { SchemaType, kafkaConsumer } from '@aws-lambda-powertools/kafka';
import type { SchemaConfig } from '@aws-lambda-powertools/kafka/types';
import { Logger } from '@aws-lambda-powertools/logger';

const logger = new Logger({ serviceName: 'kafka-consumer' });

const schemaConfig = {
  value: {
    type: SchemaType.AVRO,
    schema: readFileSync(new URL('./user.avsc', import.meta.url), 'utf8'),
  },
} satisfies SchemaConfig;

export const handler = kafkaConsumer(async (event, _context) => {
  for (const { value } of event.records) {
    logger.info('received value', { value });
  }
}, schemaConfig);

普罗托布夫·舍马

import { SchemaType, kafkaConsumer } from '@aws-lambda-powertools/kafka';
import type { SchemaConfig } from '@aws-lambda-powertools/kafka/types';
import { Logger } from '@aws-lambda-powertools/logger';
import { User } from './samples/user.es6.generated.js'; // protobuf generated class

const logger = new Logger({ serviceName: 'kafka-consumer' });

const schemaConfig = {
  value: {
    type: SchemaType.PROTOBUF,
    schema: User,
  },
} satisfies SchemaConfig;

export const handler = kafkaConsumer(async (event, _context) => {
  for (const { value } of event.records) {
    logger.info('received value', { value });
  }
}, schemaConfig);

附加解析

您可以使用您的首选解析库解析已解析的数据 。 这可以帮助您将Kafka数据与您的域名计划和应用架构整合,提供类型提示,运行时间解析和验证,以及高级数据转换.

佐德语Name

import { SchemaType, kafkaConsumer } from '@aws-lambda-powertools/kafka';
import type { SchemaConfig } from '@aws-lambda-powertools/kafka/types';
import { Logger } from '@aws-lambda-powertools/logger';
import { z } from 'zod/v4';

const logger = new Logger({ serviceName: 'kafka-consumer' });

const OrderItemSchema = z.object({
  productId: z.string(),
  quantity: z.number().int().positive(),
  price: z.number().positive(),
});

const OrderSchema = z.object({
  id: z.string(),
  customerId: z.string(),
  items: z.array(OrderItemSchema).min(1, 'Order must have at least one item'),
  createdAt: z.iso.datetime(),
  totalAmount: z.number().positive(),
});

const schemaConfig = {
  value: {
    type: SchemaType.JSON,
    parserSchema: OrderSchema,
  },
} satisfies SchemaConfig;

export const handler = kafkaConsumer<unknown, z.infer<typeof OrderSchema>>(
  async (event, _context) => {
    for (const record of event.records) {
      const {
        value: { id, items },
      } = record;
      logger.setCorrelationId(id);
      logger.debug(`order includes ${items.length} items`);
    }
  },
  schemaConfig
);

维利博特

import { SchemaType, kafkaConsumer } from '@aws-lambda-powertools/kafka';
import type { SchemaConfig } from '@aws-lambda-powertools/kafka/types';
import { Logger } from '@aws-lambda-powertools/logger';
import * as v from 'valibot';

const logger = new Logger({ serviceName: 'kafka-consumer' });

const OrderItemSchema = v.object({
  productId: v.string(),
  quantity: v.pipe(v.number(), v.integer(), v.toMinValue(1)),
  price: v.pipe(v.number(), v.integer()),
});

const OrderSchema = v.object({
  id: v.string(),
  customerId: v.string(),
  items: v.pipe(
    v.array(OrderItemSchema),
    v.minLength(1, 'Order must have at least one item')
  ),
  createdAt: v.pipe(v.string(), v.isoDateTime()),
  totalAmount: v.pipe(v.number(), v.toMinValue(0)),
});

const schemaConfig = {
  value: {
    type: SchemaType.JSON,
    parserSchema: OrderSchema,
  },
} satisfies SchemaConfig;

export const handler = kafkaConsumer<unknown, v.InferInput<typeof OrderSchema>>(
  async (event, _context) => {
    for (const record of event.records) {
      const {
        value: { id, items },
      } = record;
      logger.setCorrelationId(id);
      logger.debug(`order includes ${items.length} items`);
    }
  },
  schemaConfig
);

ArkType 密码

import { SchemaType, kafkaConsumer } from '@aws-lambda-powertools/kafka';
import type { SchemaConfig } from '@aws-lambda-powertools/kafka/types';
import { Logger } from '@aws-lambda-powertools/logger';
import { type } from 'arktype';

const logger = new Logger({ serviceName: 'kafka-consumer' });

const OrderItemSchema = type({
  productId: 'string',
  quantity: 'number.integer >= 1',
  price: 'number.integer',
});

const OrderSchema = type({
  id: 'string',
  customerId: 'string',
  items: OrderItemSchema.array().moreThanLength(0),
  createdAt: 'string.date',
  totalAmount: 'number.integer >= 0',
});

const schemaConfig = {
  value: {
    type: SchemaType.JSON,
    parserSchema: OrderSchema,
  },
} satisfies SchemaConfig;

export const handler = kafkaConsumer<unknown, typeof OrderSchema.infer>(
  async (event, _context) => {
    for (const record of event.records) {
      const {
        value: { id, items },
      } = record;
      logger.setCorrelationId(id);
      logger.debug(`order includes ${items.length} items`);
    }
  },
  schemaConfig
);

见 文档 关于如何使用卡夫卡工具的更详细信息.

贡献

如果你有兴趣为这个项目捐款,请参见我们 贡献准则。 。 。 .

路线图

AWS Lambda(英语:TypeScript)的"Powertools"行进图受顾客需求所驱动.
帮助我们确定未来功能或公用事业的优先次序 更新现有 RFC 和功能请求,或 创建新的,在此 GitHub 仓库中.

连接

如何支持 AWS Lambda (TypeScript) 的 Powertools ?

成为参考客户

了解哪些公司正在使用这个图书馆对于帮助在内部确定项目的优先次序很重要。 如果您的公司正在使用 Powertools 为 AWS Lambda (TypeScript) , 您可以要求您在 README 文件中添加您的姓名和标志 AWS Lambda( TypeScript) 的辅助电源工具(成为参考) 问题.

除其他外,下列公司使用Powertools:

分享你的工作

分享您为 AWS Lambda (TypeScript) 所做的 Powertools 。 看看社区有什么 已经共享 关于AWS Lambda的Powertools (TypeScript).

使用 Lambda 层

这帮助我们了解谁用Powertools为AWS Lambda(英语:TypeScript (TypeScript))以非侵入性的方式使用Powertools,并帮助我们获得未来对其他AWS Lambda语言的Powertool的投资. 何时 使用图层,您可以添加Powertools作为dev的依赖性,以不影响开发过程.

许可证

这个图书馆根据MIT-0许可证获得许可. 见LICENSE文件.

版本与发布记录

@aws-lambda-powertools/kafka 共发布 24 个版本,首次发布于 2025/06/21;过去 12 个月发布了 11 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.36.0latest2026/10/061 个月前
2.35.02026/08/182 个月前
2.34.02026/07/103 个月前
2.33.12026/05/255 个月前
2.33.02026/04/146 个月前
2.32.02026/03/197 个月前

其他发布通道:pre → 0.0.0。

关于 @aws-lambda-powertools/kafka 的常见问题

@aws-lambda-powertools/kafka 是什么?

在AWS Lambda函数中方便处理Kafka事件的信息去区域化和剖析的工具

如何安装 @aws-lambda-powertools/kafka?

在项目目录运行 npm install @aws-lambda-powertools/kafka,或使用 pnpm add / yarn add / bun add。

@aws-lambda-powertools/kafka 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@aws-lambda-powertools/kafka 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@aws-lambda-powertools/kafka 可以商用吗?

@aws-lambda-powertools/kafka 使用 MIT-0 许可。声明的许可为 MIT-0,请阅读许可原文确认使用条件。以上为概括,不构成法律意见,请以许可原文为准。

@aws-lambda-powertools/kafka 的下载量有多少?

根据 npm 官方下载统计,@aws-lambda-powertools/kafka 在 2026/10/08 – 2026/11/06 这 30 天内被下载 4,881 次,日均约 163 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@aws-lambda-powertools/kafka 还在维护吗?

最新版本 2.36.0 发布于 2026/10/06(1 个月前);至今共发布 24 个版本,其中过去 12 个月发布了 11 个;首次发布于 2025/06/21。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。