Apache flink 如何在ApacheKafka连接器中实现一次语义
我使用的是flink 1.8.0版。我的应用程序从kafka->transform->publish to kafka读取数据。为了避免重新启动期间出现任何重复,我想使用kafka producer的精确一次语义,请在此处阅读: 我的卡夫卡版本是1.1Apache flink 如何在ApacheKafka连接器中实现一次语义,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我使用的是flink 1.8.0版。我的应用程序从kafka->transform->publish to kafka读取数据。为了避免重新启动期间出现任何重复,我想使用kafka producer的精确一次语义,请在此处阅读: 我的卡夫卡版本是1.1 return new FlinkKafkaProducer<String>( topic, new KeyedSerializationSchema<String>() {
return new FlinkKafkaProducer<String>( topic, new KeyedSerializationSchema<String>() {
public byte[] serializeKey(String element) {
// TODO Auto-generated method stub
return element.getBytes();
}
public byte[] serializeValue(String element) {
// TODO Auto-generated method stub
return element.getBytes();
}
public String getTargetTopic(String element) {
// TODO Auto-generated method stub
return topic;
}
},prop, opt, FlinkKafkaProducer.Semantic.EXACTLY_ONCE, 1);
如果我在kafka producer中只添加一次语义,我的flink消费者不会读取任何新数据
任何人都可以用一次语义共享任何示例代码/应用程序吗
请在此处找到完整的代码:
谢谢
任何人都可以用一次语义共享任何示例代码/应用程序吗
一个仅一次的示例隐藏在。由于它使用了一些方便的功能,如果不检查整个回购协议,可能很难遵循
如果我在卡夫卡制作人,我的flink消费者中添加一次语义
没有读取任何新数据。
[...]
请在此处找到完整的代码:
我检查了您的代码并发现了问题(必须修复整个设置/代码才能真正运行)。接收器实际上无法正确配置事务。如中所述,您需要在Kafka broker中将transaction.timeout.ms
调整为1小时,或在应用程序中将其调整为15分钟:
prop.setProperty("transaction.timeout.ms", "900000");
有关摘录如下:
默认情况下,Kafka代理将transaction.max.timeout.ms设置为15分钟。此属性不允许为大于其值的生产者设置事务超时。默认情况下,FlinkKafkaProducer011将producer config中的transaction.timeout.ms属性设置为1小时,因此在使用Semantic.unce模式之前,应增加transaction.max.timeout.ms
在此处添加了代码:。在同一个代码中,如果我至少使用一次,它工作得很好。感谢Arvid向我解释这个问题。在您提到的评论中,您必须修复整个设置/代码才能真正运行它。如果您能解释除了transaction.timeout.ms config之外,还需要更改哪些内容,这将非常有用?如果你也能分享完整的代码,那就更有帮助了。提前感谢我在您的回购协议中添加了一个拉取请求。
prop.setProperty("transaction.timeout.ms", "900000");