Kafka工具类

java 复制代码
package utils;

import org.apache.flink.api.common.eventtime.WatermarkStrategy;
import org.apache.flink.api.common.serialization.SimpleStringSchema;
import org.apache.flink.connector.kafka.sink.KafkaRecordSerializationSchema;
import org.apache.flink.connector.kafka.sink.KafkaSink;
import org.apache.flink.connector.kafka.source.KafkaSource;
import org.apache.flink.connector.kafka.source.enumerator.initializer.OffsetsInitializer;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

/**
 * @Package utils.KafkaUtil
 * @Author xuang
 * @Date 2025/5/13 16:20
 * @description: kafka工具类
 */
public class KafkaUtil {
    public static KafkaSink<String> getKafkaProduct(String servers, String topic) {
        return KafkaSink.<String>builder()
                .setBootstrapServers(servers)
                .setRecordSerializer(KafkaRecordSerializationSchema.builder()
                        .setTopic(topic)
                        .setValueSerializationSchema(new SimpleStringSchema())
                        .build()
                )
                .build();
    }

    public static DataStreamSource<String> getKafkaConsumer(StreamExecutionEnvironment env, String servers, String topic) {
        // 配置 KafkaSource
        KafkaSource<String> source = KafkaSource.<String>builder()
                .setBootstrapServers(servers)
                .setTopics(topic)
                .setGroupId("flink-group")
                .setStartingOffsets(OffsetsInitializer.earliest())
                .setValueOnlyDeserializer(new SimpleStringSchema())
                .build();

        // 将 KafkaSource 添加到作业
        return env.fromSource(source, WatermarkStrategy.noWatermarks(), "Kafka Source");
    }
}

概述

KafkaUtil 是一个 Apache Flink 工具类,封装了 Kafka 作为数据源(Source)和数据汇(Sink)的常用操作,简化了 Flink 与 Kafka 集成的开发工作。

功能

实现细节

Kafka Sink 配置

Kafka Source 配置

最佳实践

  1. Kafka Sink​ - 将 Flink 数据流写入 Kafka

  2. Kafka Source​ - 从 Kafka 读取数据作为 Flink 数据源

  3. 使用 SimpleStringSchema 作为值的序列化器

  4. 支持多服务器配置

  5. 需要指定目标 topic

  6. 使用 SimpleStringSchema 作为值的反序列化器

  7. 从最早偏移量开始消费(earliest())

  8. 默认消费者组 ID 为 "flink-group"

  9. 不使用 watermark 策略

  10. 消费者组管理

    对于生产环境,建议在调用处自定义消费者组 ID,而不是使用默认的 "flink-group"

  11. 序列化扩展

    对于复杂数据类型,可以扩展此类支持自定义序列化/反序列化器

  12. 容错配置

    生产环境中应考虑添加以下配置:

    • 重试策略

    • 事务配置(精确一次语义)

    • 检查点配置

  13. 安全配置

    如果 Kafka 集群启用了安全认证,需要添加以下配置:

    • SSL/TLS

    • SASL 认证

    • ACL 权限

相关推荐
indexsunny38 分钟前
互联网大厂Java面试实战:Spring Boot与微服务在电商场景的应用解析
java·spring boot·redis·微服务·kafka·gradle·maven
小辉笔记2 小时前
kafka原理总结
分布式·kafka
俊哥大数据3 小时前
【实战项目5】基于Flink新闻热搜大数据实时分析项目
大数据·flink
俊哥大数据3 小时前
【实战项目3】基于Flink广告投放业务领域大数据实时分析项目
大数据·flink
Hello.Reader3 小时前
PyFlink Configuration 一次讲透怎么配、配哪些、怎么“调得快且稳”
运维·服务器·python·flink
Hello.Reader3 小时前
PyFlink Table API / DataStream API / UDF / 依赖管理 / 运行时模式一篇打通(含示例代码与避坑)
python·flink
Hello.Reader4 小时前
PyFlink FAQ 高频踩坑速查版
python·flink
潇凝子潇1 天前
kafka之监控告警
分布式·kafka
潇凝子潇1 天前
Kafka 实现集群安全认证与加密机制
分布式·安全·kafka
indexsunny1 天前
互联网大厂Java求职面试实战:微服务与Spring Boot在电商场景中的应用
java·数据库·spring boot·微服务·kafka·hibernate·电商