在Storm Bolt中获取单个元组的Kafka Offsets

时间:2016-05-04 17:51:06

标签: amazon-s3 apache-kafka offset apache-storm batching

使用案例

使用Apache Storm将Kafka消息保存到S3

到目前为止

故事

  • 我尝试使用secor(https://github.com/pinterest/secor),工作正常,达到目的。但是,根据经理(他们说的总是正确的),维护过度可能太多了。
  • 我们已经安装了Apache Kafka-Apache Storm稳定集群,因此计划利用该基础设施。

议程和问题

  • 来自Kafka的消息将在Storm bolt中批处理,并将在文件中写入本地磁盘

  • 在某些间隔和/或尺寸标准后,它将上传到S3

  • 为了管理故障,每个螺栓应该能够跟踪Kafka分区并理想地按每个元组进行偏移,因为螺栓将在整个群集中随机分布。

  • 分区/偏移可以持久保存到Zookeeper,但首先如何从螺栓中的Tuple获取它们?除了从Kafka Spout转发螺栓之外的任何其他方式吗?

2 个答案:

答案 0 :(得分:0)

Kafka spout已经在zookeeper中跟踪主题偏移,所以你不需要在bolt中实现这个逻辑。

Kafka spout将发出元组,拓扑将跟踪它。当元组通过螺栓拧紧时,它就通过了。 Spout会考虑传递元组。在发送元组spout后面会跟踪zookeeper中的当前偏移量,所以如果出现问题,你可以开始读取消息而不是从beggining开始。

上述拓扑将保证至少提供一次。使用三叉戟拓扑,您可以保证只提供一次。在这两种情况下,请查看topology.max.spout.pending设置。设置正确是至关重要的,因为你要使用批处理。

答案 1 :(得分:0)

KafkaSpout配置为org.apache.storm.kafka.StringMessageAndMetadataScheme,这会将偏移和分区添加到Spouts发出的值