假设我的主题中已经有10个数据,现在我开始用Flink
编写使用者,该使用者将使用第11个数据。
因此,我有3个问题:
Flink
使用者崩溃,并且几分钟后恢复。消费者将如何知道从哪里重新启动? 感谢您的帮助。示例代码(我尝试过FlinkKafkaConsumer08
,FlinkKafkaConsumer10
,但都例外。):
public class kafkaConsumer {
public static void main(String[] args) throws Exception {
// create execution environment
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.enableCheckpointing(5000);
Properties properties = new Properties();
properties.setProperty("bootstrap.servers", "192.168.95.2:9092");
properties.setProperty("group.id", "test");
properties.setProperty("auto.offset.reset", "earliest");
FlinkKafkaConsumer09<String> myConsumer = new FlinkKafkaConsumer09<>(
"game_event", new SimpleStringSchema(), properties);
DataStream<String> stream = env.addSource(myConsumer);
stream.map(new MapFunction<String, String>() {
private static final long serialVersionUID = -6867736771747690202L;
@Override
public String map(String value) throws Exception {
return "Stream Value: " + value;
}
}).print();
env.execute();
}
}
还有pom.xml:
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-clients_2.11</artifactId>
<version>1.6.1</version>
</dependency>
答案 0 :(得分:1)
您还可以指定使用者应从的确切偏移量 对于每个分区:
Map<KafkaTopicPartition, Long> specificStartOffsets = new HashMap<>(); specificStartOffsets.put(new KafkaTopicPartition("myTopic", 0), 23L); specificStartOffsets.put(new KafkaTopicPartition("myTopic", 1), 31L); specificStartOffsets.put(new KafkaTopicPartition("myTopic", 2), 43L); myConsumer.setStartFromSpecificOffsets(specificStartOffsets);
上面的示例将使用者配置为从指定的开始 主题myTopic的分区0、1和2的偏移量。偏移值 应该是消费者应阅读的下一个记录 划分。请注意,如果使用者需要读取一个分区, 在提供的偏移量图内没有指定的偏移量, 将回退到默认的组补偿行为(即 该特定分区的setStartFromGroupOffsets())。
请注意,这些开始位置配置方法不会影响 自动从故障中恢复作业的开始位置 或使用保存点手动还原。恢复时,开始位置 每个Kafka分区的大小取决于存储在 保存点或检查点(请参阅下一部分以获取信息) 有关为消费者启用容错功能的检查点。
consumer_offsets
主题,以便从崩溃之前的位置继续处理消息。 consumer_offsets
是一个主题,用于存储有关每个三元组(主题,分区,组)的已提交偏移量的元数据信息。它还会定期压缩,以便仅提供最新的偏移量。您还可以参考Flink's Kafka Connectors Metrics:Flink的Kafka连接器通过Flink的指标提供了一些指标 系统分析连接器的行为。生产者出口 Kafka的内部指标通过Flink的指标体系 支持的版本。消费者导出所有指标,从 Kafka 0.9版。 Kafka文档列出了所有导出的指标 在其文档中。
除这些指标外,所有消费者还暴露当前冲销 和每个主题分区的承诺偏移量。电流偏移 指分区中的当前偏移量。这是指 我们成功检索并成功发出的最后一个元素的偏移量。 提交的偏移量是最后的提交的偏移量。
Flink中的Kafka消费者将偏移量返还给Zookeeper (Kafka 0.8)或Kafka经纪人(Kafka 0.9+)。如果检查点是 禁用时,将定期提交偏移量。通过检查点, 一旦流拓扑中的所有运算符具有 确认他们已经创建了状态检查站。这个 为用户提供至少一次提交的偏移量的语义 给Zookeeper或经纪人。对于指向Flink的偏移量, 系统只提供一次保证。
提交给ZK或经纪人的偏移量也可以用于跟踪 Kafka消费者的阅读进度。两者之间的区别 提交的偏移量,每个分区中的最新偏移量是 称为消费者滞后。如果Flink拓扑正在使用数据 主题比添加新数据慢,则滞后会增加 消费者将落后。对于大型生产部署,我们 建议监控该指标以避免增加延迟。