是flink对kafka的消费,是自己管理offset,用low-level api去寻址,而不是用group.id来管理offset这种high-level api。是这个意思吧。
op <[email protected]> 于2020年9月4日周五 上午10:25写道: > > 谢谢,但我还是不太明白,FlinkKafkaConsumer底层不是用的KafkaConsumer吗,为什么flink不用kafka的消费组管理呢? > > > ------------------ 原始邮件 ------------------ > 发件人: > "user-zh" > < > [email protected]>; > 发送时间: 2020年9月3日(星期四) 晚上6:09 > 收件人: "user-zh"<[email protected]>; > > 主题: Re: FlinkKafkaConsumer问题 > > > > Hi op, > > 在 Flink 消费 Kafka 的过程中, 由 FlinkKafkaConsumer 会从 Kafka 中拿到当前 topic 的所有 > partition 信息并分配给个并发消费,这里的 group id 只是用于将当前 partition 的消费 offset commit 到 > Kafka,并用这个消费组标识。而使用 KafkaConsumer 消费数据则应用到了 Kafka 的消费组管理, 这是 Kafka 服务端的一个角色。 > > 另外,当启动两个作业用同一个 topic 和 group id 消费 kafka, 如果两个作业会分别以同一个 group id commit > offset 到kafka, 如果以 group offset 消费模式启动作业, 则会以最后一次 commit 的 offset 开始消费。 > > > 在 2020年9月3日,下午3:03,op <[email protected]> 写道: > > > > &nbsp; &nbsp; hi,&nbsp; &nbsp; > 我对FlinkKafkaConsumer的实现有点迷惑,&nbsp; &nbsp; 这有两个相同代码的程序: > > //--------------------------- > > val bsEnv = StreamExecutionEnvironment.getExecutionEnvironment > > Env.setRestartStrategy(RestartStrategies.noRestart()) > > val consumerProps = new Properties() > > consumerProps.put("bootstrap.servers", brokers) > > consumerProps.put("group.id", "test1234") > > > > val consumer = new FlinkKafkaConsumer[String](topic,new > KafkaStringSchema,consumerProps).setStartFromLatest() > > Env.addSource(consumer).print() > > > Env.execute()//-----------------------------------我同时启动这两个程序,他们连接相同的集群的topic, > group.id也一样,然后我向topic发送一些数据,发现这两个程序都能消费到发送的所有分区的消息,kafka 的consumer > group组内应该是有消费隔离的,为什么这里两个程序都能同时消费到全部数据呢?而用KafkaConsumer写两个相同的程序去消费这个topic就可以看到两边程序是没有重复消费同一分区的。我用的是flink1.11flink-connector-kafka_2.11 > 谢谢
