Linux环境下,Kafka与Hadoop的典型集成路径是以Kafka为实时数据管道、以HDFS为数据湖/离线存储与分析底座,通过批流一体的方式完成数据入湖、处理与回写。
一、集成架构与适用场景
二、方案对比与选型
| 方案 | 组件/工具 | 主要优点 | 适用场景 | 关键配置要点 |
|---|---|---|---|---|
| 原生导入(Kafka Connect + HDFS Sink) | Kafka Connect、HDFS Sink Connector | 运维简单、可配置化、可扩展 | 持续入湖、准实时 | 必配:bootstrap.servers、hdfs.url、topics、file.format(如 Parquet/ORC)、flush.size、rotate.interval.ms、Kerberos |
| 计算引擎消费(Spark Streaming/Direct API) | Spark Streaming 2.4+/3.x、Kafka 0.10 Direct | 灵活转换、Exactly-once(配合checkpoint/WAL)、可与Hive/Parquet深度集成 | 复杂ETL、状态计算、精确一次 | 必配:spark.streaming.kafka.maxRatePerPartition、checkpoint目录、序列化(Avro/JSON/Parquet)、落盘分区策略 |
| 可视化编排(NiFi) | Apache NiFi | 拖拽式数据管道、监控与回放、容错 | 快速落地、异构源汇聚 | 处理器:ConsumeKafka →(转换)→ PutHDFS;设置Rollback on Failure、并发与背压 |
| 日志采集与聚合(Flume) | Apache Flume | 日志场景成熟、容错 | 服务器日志到HDFS | Agent:Kafka Source → File Channel → HDFS Sink;注意batchSize与rollInterval |
三、落地步骤与关键配置
环境与连通性
telnet <broker-ip> 9092,验证 HDFS:hdfs dfs -ls /。部署与基础配置
数据入湖示例
kafka-topics.sh --create --topic order-events --partitions 12 --replication-factor 3 --bootstrap-server kafka1:9092,kafka2:9092"connector.class": "io.confluent.connect.hdfs.HdfsSinkConnector""topics": "order-events""hdfs.url": "hdfs://nn:8020/data/kafka""format.class": "io.confluent.connect.hdfs.parquet.ParquetFormat""flush.size": "100000","rotate.interval.ms": "60000"security.protocol=SASL_PLAINTEXT 与 JAAS。spark.serializer=org.apache.spark.serializer.KryoSerializer、checkpoint 目录、批次间隔(如 30s)、落盘分区与压缩(如 snappy)。四、性能与可靠性优化
acks=all、retries;消费端 手动提交 与幂等/事务(如需要精确一次)。五、常见问题与排查要点
hdfs dfs -chmod -R 775 /data/kafka)。