Kafka和HBase集成的最佳实践

Posted

技术标签:

【中文标题】Kafka和HBase集成的最佳实践【英文标题】:Best practice for integrating Kafka and HBase 【发布时间】:2015-11-10 23:52:45 【问题描述】:

将流数据从 Kafka“导入”到 HBase 的最佳实践是什么?

用例如下:车辆传感器数据流式传输到 Kafka。之后,这些传感器数据必须进行转换(即从人类可读数据中的 protobuf 反序列化)并存储在 HBase 中。

1) 你推荐哪个工具集(例如,Kafka --> Flume --> HBase、Kafka --> Storm --> HBase、Kafka --> Spark Streaming --> HBase、Kafka --> HBase)

2) 进行 protobuf 反序列化的最佳位置是什么(例如,在 Flume 中使用拦截器)?

感谢您的支持。

最好的,托马斯

【问题讨论】:

另一个选项是 Kafka - Camus - HDFS -> MR 转换成 HBase HFile -> 批量加载到 HBase。尤其是在大批量摄取输入数据的情况下。 你也可以使用 Apache Flink Streaming。 传感器数据“单独”流式传输到 kafka,即没有将传感器数据批量加载到 Kafka。相反,一条消息会保存一辆车在特定时间点的相关传感器数据。 【参考方案1】:

我认为你只需要做 Kafka -> Storm -> HBase

Storm:Storm spout 将订阅 Kafka 主题。 然后Storm bolts可以转换数据并将其写入HBase。 您可以在 java 中使用 HBase 客户端 api 从 Storm 将数据写入 HBase。

我建议使用 Storm,因为它实际上一次处理一个元组。 In Spark streaming, a micro-batch is processed。但是,如果您想使用通用基础架构进行批处理和流处理,那么 Spark 可能是一个不错的选择。

如果您最终使用 Spark,那么您的流程也将是 Kafka -> Spark -> HBase

【讨论】:

为什么你更喜欢 Storm 而不是其他替代品(Flume、Spark Streaming)? @ThomasBeer :Spark 流式传输不是真正的流式传输。其微批量处理。虽然,您可以称其为流处理。这是一本好书:sqlstream.com/blog/2015/03/… Flume 主要用于日志聚合。我对它被用作流处理引擎的受欢迎程度没有信心。【参考方案2】:

1) 我建议使用“Kafka Connect”连接器将数据从 Kafka 流式传输到 HBase。 Kafka 社区有几个接收器连接器: http://docs.datamountaineer.com/en/latest/hbase.html https://github.com/mravi/kafka-connect-hbase 2) 至于转换数据,您可以使用 Kafka Streams,它是自 2016 年 5 月 Kafka 0.10 发布以来包含在 Kafka 中的轻量级 Java 库:http://kafka.apache.org/documentation/streams

【讨论】:

以上是关于Kafka和HBase集成的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

大数据最佳实践 | HBase客户端(上)

HBase在滴滴出行的应用场景和最佳实践

HBase 读流程解析与优化的最佳实践

HBase赠书|云HBase Thrift使用最佳实践

聊聊 Kafka:Kafka 消息重复的场景以及最佳实践

聊聊 Kafka:Kafka 消息重复的场景以及最佳实践