使用案例
使用Apache Storm将Kafka消息保存到S3
到目前为止故事
议程和问题
来自Kafka的消息将在Storm bolt中批处理,并将在文件中写入本地磁盘
在某些间隔和/或尺寸标准后,它将上传到S3
为了管理故障,每个螺栓应该能够跟踪Kafka分区并理想地按每个元组进行偏移,因为螺栓将在整个群集中随机分布。
分区/偏移可以持久保存到Zookeeper,但首先如何从螺栓中的Tuple获取它们?除了从Kafka Spout转发螺栓之外的任何其他方式吗?
答案 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发出的值