关于 kafka
kafka 是介绍 Apache Kafka 的技能,面向数据工程和应用团队。内容涵盖基于主题的消息传递、消费者组、事务交付,以及使用 Kafka Streams 进行流处理。
主要功能
- 01分布式主题与分区
- 02事务性精确一次语义
- 03消息保留策略
- 04消费者组负载均衡
- 05Kafka Streams 状态处理
适用场景
- 01构建实时数据管道
- 02通过流处理聚合日志
- 03用事件连接微服务
- 04使用 Kafka Streams 转换事件流
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill kafka安装后在 Claude Code 中输入/kafka确认已加载。
详细介绍
kafka
用途
Apache Kafka 是一个分布式事件流平台,用于构建实时数据管道和流式应用,可实现高吞吐量、容错的消息传递。
适用场景
在需要实时数据摄取和处理的场景中使用 Kafka,例如日志聚合、事件驱动架构或微服务通信;对于 RabbitMQ 等轻量级工具就能满足的简单队列需求,则应避免使用 Kafka。
主要功能
- 支持通过主题、分区和副本实现分布式流处理,确保可扩展性和持久性。
- 通过事务 API 提供恰好一次语义,防止数据丢失或重复。
- 可通过可配置的保留策略处理大量数据,例如在 broker 配置中设置
log.retention.hours=168,将消息保留 7 天。 - 提供消费者组以实现负载均衡,多个消费者共享一个组 ID 来分担主题消费。
- 通过 Kafka Streams API 集成流处理,以进行有状态转换,例如使用
KTable对象聚合事件。
使用模式
要生成消息,请先创建主题,然后使用生产者客户端;要消费消息,请订阅主题并在循环中处理消息。始终手动处理偏移量或使用自动提交,以避免重复处理。对于批处理,可使用 Kafka Connect 从数据库等来源摄取数据。模式:在生产者配置中设置 enable.idempotence=true,使用幂等生产者实现至少一次投递。
常用命令/API
使用 Kafka CLI 执行快速操作:
- 创建主题:
kafka-topics.sh --create --topic mytopic --bootstrap-server localhost:9092 --partitions 3 --replication-factor 2 - 生成消息:
kafka-console-producer.sh --topic mytopic --bootstrap-server localhost:9092(输入消息并按 Ctrl+D 发送) - 消费消息:
kafka-console-consumer.sh --topic mytopic --from-beginning --bootstrap-server localhost:9092 --group mygroupJava API 用法: - 生产者示例:
Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); KafkaProducer<String, String> producer = new KafkaProducer<>(props); producer.send(new ProducerRecord<>("mytopic", "key", "value")); - 消费者示例:
Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("group.id", "mygroup"); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props); consumer.subscribe(Collections.singletonList("mytopic")); ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
使用 SASL 进行身份验证:将 $KAFKA_SASL_JAAS_CONFIG 设置为 "org.apache.kafka.common.security.plain.PlainLoginModule required username='$SERVICE_API_KEY';"。
集成说明
通过 Kafka Connect 将 Kafka 与其他系统集成以连接数据源/接收端,例如用于数据库的 JDBC 连接器。进行身份验证时,使用 SSL 或 SASL,并通过 $KAFKA_CLIENT_API_KEY 等环境变量传入密钥。连接 Spark 时,使用 spark.kafka.bootstrap.servers 配置 Spark Streaming,并添加 spark-sql-kafka-0-10_2.12 等依赖项。对于微服务,可将 Kafka 用作骨干,由生产者向主题发送事件,再由消费者通过 webhook 响应。始终指定确切版本,例如 Kafka 3.4.0,并使用端点为 http://localhost:8081/subjects 的 Confluent Schema Registry。
错误处理
通过检查 broker 是否可用并使用指数退避重试,处理连接失败等常见错误;例如,在代码中使用 try-catch 包装 producer.send(),最多重试 3 次。如果偏移量超出范围,可在消费者配置中使用 auto.offset.reset=earliest,从头开始消费。对于身份验证错误(例如 401 Unauthorized),请检查 $SERVICE_API_KEY 等环境变量,并确保 SASL 机制匹配。记录详细错误信息,例如在 Java 中:catch (KafkaException e) { log.error("Kafka error: {}", e.getMessage()); }。通过监控副本并使用 min.insync.replicas=2 强制要求确认,以应对 broker 崩溃。
图关系
- 所属集群:data-engineering
- 相关标签:event-streaming、data-pipelines、kafka
- 潜在关联:与 data-engineering 集群中的技能集成,例如使用 spark 或 hadoop 构建数据处理管道。