Apache flink FlinkKafkaConsumer设置组.id在消费时无法正常工作

Apache flink FlinkKafkaConsumer设置组.id在消费时无法正常工作,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我使用了flink1.10.0一段时间,发现了一个奇怪的问题 我提交同一份工作两次 $flink列表-r 2020年2月28日18:04:24:f9ad14cb86a14c388ed6a146c80988fd:ReadKafkaJob(正在运行) 2020年2月28日18:07:23:e05bf26ee986573ffc01af8b1f5d1d59:ReadKafkaJob(正在运行) 两个作业具有相同的group.id,但每个作业都可以读取数据。 下面的日志显示相同的事件消耗两次 2020-

我使用了flink1.10.0一段时间,发现了一个奇怪的问题

我提交同一份工作两次

$flink列表-r
2020年2月28日18:04:24:f9ad14cb86a14c388ed6a146c80988fd:ReadKafkaJob(正在运行)
2020年2月28日18:07:23:e05bf26ee986573ffc01af8b1f5d1d59:ReadKafkaJob(正在运行)
两个作业具有相同的group.id,但每个作业都可以读取数据。 下面的日志显示相同的事件消耗两次

2020-02-28 18:08:29,600 INFO  com.stc.sls.stream_process.examples.ReadKafkaJob              - eventDo={"id":"odd奇数","value":0.1,"eventTs":1582884509239,"seqNo":0}
2020-02-28 18:08:29,601 INFO  com.stc.sls.stream_process.examples.ReadKafkaJob              - eventDo={"id":"odd奇数","value":0.1,"eventTs":1582884509239,"seqNo":0}
2020-02-28 18:08:34,442 INFO  com.stc.sls.stream_process.examples.ReadKafkaJob              - eventDo={"id":"odd奇数","value":0.5,"eventTs":1582884514437,"seqNo":1}
2020-02-28 18:08:34,442 INFO  com.stc.sls.stream_process.examples.ReadKafkaJob              - eventDo={"id":"odd奇数","value":0.5,"eventTs":1582884514437,"seqNo":1}
2020-02-28 18:08:39,448 INFO  com.stc.sls.stream_process.examples.ReadKafkaJob              - eventDo={"id":"odd奇数","value":0.2,"eventTs":1582884519443,"seqNo":2}
2020-02-28 18:08:39,448 INFO  com.stc.sls.stream_process.examples.ReadKafkaJob              - eventDo={"id":"odd奇数","value":0.2,"eventTs":1582884519443,"seqNo":2}

我已在代码中设置了“group.id”

String kafkaTopic=params.get(“kafka主题”、“flink测试”);
字符串brokers=params.get(“brokers”,“192.168.0.100:9092”);
String groupId=“simple.read.kafka.job”;
属性Kafkapprops=新属性();
Kafkapprops.setProperty(“bootstrap.servers”,brokers);
kafkapprops.setProperty(“group.id”,groupId);
FlinkKafkaConsumer kafka=新的FlinkKafkaConsumer(kafkaTopic,new EventDeSerializer(),kafkaProps);
那么为什么同一组的两个客户会两次从卡夫卡消费?

FlinkKafkaConsumer是否有特殊的实现方式?

更新:

我做了一些测试,启动了两个控制台消费者和一个flink消费者

如果我使用kafka控制台消费者进行如下消费,client.id=123

kafka控制台使用者--引导服务器192.168.0.100:9092--主题flink测试--使用者属性组。id=simple.read.kafka.job--使用者属性客户端。id=123
和另一个client.id=456的消费者

kafka控制台使用者--引导服务器192.168.0.100:9092--主题flink测试--使用者属性组。id=simple.read.kafka.job--使用者属性客户端。id=456
然后,我在IDEA中启动flink作业,使用group.id=“simple.read.kafka.job”使用主题flink.test

我可以检查连接并找到两个消费者

➜  bin descKafkaConsumerGroup simple.read.kafka.job--成员
Java HotSpot(TM)服务器VM警告:此版本中禁用了G1 GC。
组消费者ID主机客户端ID分区分配
simple.read.kafka.job 123-5925201d-a767-4216-acdc-b46f058db0df/192.168.0.100 123 1弗林克试验(0)
simple.read.kafka.job 456-01190de7-5d4e-43c1-9cb6-b599c9c69b41/192.168.0.101 456 0-
但flink job消费者在哪里?

两个控制台使用者在一个组中行为,Flink job使用者在另一个组中行为

更新2

我已启用结帐。整个代码如下所示

import com.stc.sls.stream\u process.examples.model.StringDeSerializer;
导入lombok.extern.slf4j.slf4j;
导入org.apache.commons.lang3.StringUtils;
导入org.apache.flink.api.common.functions.MapFunction;
导入org.apache.flink.api.java.utils.ParameterTool;
导入org.apache.flink.runtime.state.statebend;
导入org.apache.flink.runtime.state.filesystem.fsstatebend;
导入org.apache.flink.streaming.api.datastream.datastream;
导入org.apache.flink.streaming.api.environment.CheckpointConfig;
导入org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
导入org.apache.flink.streaming.api.functions.sink.DiscardingSink;
导入org.apache.flink.streaming.connectors.kafka.flinkkafconsumer;
导入java.util.Properties;
导入java.util.UUID;
@Slf4j
公共类SimpleRadKafkajob{
最后一个静态字符串clientId=“cid”+StringUtils.remove(UUID.randomUUID().toString(),“-”).substring(0,6);
公共静态void main(字符串[]args)引发异常{
final ParameterTool params=ParameterTool.fromArgs(args);
字符串kafkaTopic=params.get(“kafka主题”、“flink测试”);
字符串brokers=params.get(“brokers”,“192.168.0.100:9092”);
String groupId=“simple.read.kafka.job”;
System.out.printf(“阅读卡夫卡主题%s@%s\n”,卡夫卡主题,经纪人);
System.out.println();
属性Kafkapprops=新属性();
Kafkapprops.setProperty(“bootstrap.servers”,brokers);
kafkapprops.setProperty(“group.id”,groupId);
kafkapprops.setProperty(“client.id”,clientId);
FlinkKafkaConsumer kafka=新的FlinkKafkaConsumer(kafkaTopic,new StringDeSerializer(),Kafkapprops);
kafka.setStartFromGroupOffsets();
kafka.SetCommitofSetsonCheckpoints(真);
最终StreamExecutionEnvironment env=StreamExecutionEnvironment.getExecutionEnvironment();
环境(一);
环境启用检查点(20000);
环境setStateBackend((StateBackend)新的FsStateBackend(“file:///Users/ym/tmp/checkpoint"));
env.getCheckpointConfig().enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN ON_ON_取消);
DataStream DataStream=env.addSource(kafka);
dataStream.map((MapFunction)s->{
log.info(“message={}”,s);
返回s;
}).addSink(新的丢弃链接());
execute(simpleradkafkajob.class.getSimpleName());
}
}
和下面的日志一样

23:00:47643 INFO org.apache.kafka.clients.consumer.KafkaConsumer-[consumer clientId=cidb30879,groupId=simple.read.kafka.job]已订阅分区:flink-test-0
23:00:47673 INFO org.apache.kafka.clients.Metadata-集群ID:lsitmbmw1t_SHYQvJMt_6Fw
23:00:47677 INFO org.apache.kafka.clients.consumer.internals.AbstractCoordinator-[consumer clientId=cidb30879,groupId=simple.read.kafka.job]发现了组协调器192.168.0.100:9092(id:2147483647 rack:null)
23:01:02160 INFO org.apache.flink.runtime.checkpoint.checkpoint Coordinator-为作业4d97a614ef4f928b93c8159f30e9c22e在1583406462134处触发检查点1。
23:01:02572 INFO org.apache.flink.runtime.checkpoint.checkpoint Coordinator-已完成作业4d97a614ef4f928b93c8159f30e9c22e的检查点1(437毫秒内1236字节)。
23:01:22136 INF
20:38:17,107 INFO  org.apache.kafka.clients.consumer.KafkaConsumer               - [Consumer clientId=cid0931c3, groupId=simple.read.kafka.job] Subscribed to partition(s): flink-test-0
bin descKafkaConsumerGroup simple.read.kafka.job --members
Java HotSpot(TM) Server VM warning: G1 GC is disabled in this release.

Consumer group 'simple.read.kafka.job' has no active members.