flink kafka消费者群体不工作

时间:2016-07-28 14:14:04

标签: apache-kafka apache-flink

我正在使用kafka和flink。 在一个简单的程序中,我使用flinks FlinkKafkaConsumer09,为其分配了组ID。

根据Kafka的行为,当我在相同的主题上运行2个消费者时,它应该像消息队列一样工作。我认为它应该像以下一样工作: 如果向Kafka发送了2条消息,则每个或一个flink程序将完全处理2条消息两次(让我们说总共2行输出)。

但实际结果是,每个程序都会收到2条消息。

我曾尝试使用kafka服务器下载附带的客户端客户端。它以记录的方式工作(处理了2条消息) 我尝试在flink程序的相同主要功能中使用2个kafka消费者。完全处理了4条消息 我还尝试运行2个flink实例,并为每个实例分配了kafka使用者的相同程序。 4条消息。

有什么想法吗? 这是我期望的输出:

1> Kafka and Flink2 says: element-65  
2> Kafka and Flink1 says: element-66 

这里输出错误的输出:

1> Kafka and Flink2 says: element-65  
1> Kafka and Flink1 says: element-65  
2> Kafka and Flink2 says: element-66  
2> Kafka and Flink1 says: element-66 

以下是代码段:

public static void main(String[] args) throws Exception {

    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

    ParameterTool parameterTool = ParameterTool.fromArgs(args);

    DataStream<String> messageStream = env.addSource(new FlinkKafkaConsumer09<>(parameterTool.getRequired("topic"), new SimpleStringSchema(), parameterTool.getProperties()));

    messageStream.rebalance().map(new MapFunction<String, String>() {
        private static final long serialVersionUID = -6867736771747690202L;

        @Override
        public String map(String value) throws Exception {
            return "Kafka and Flink1 says: " + value;
        }
    }).print();


    env.execute();
}

我试过两次运行,另一种方式运行: 为Main函数中的每一个创建2个数据流和env.execute()。

2 个答案:

答案 0 :(得分:5)

今天在Flink用户邮件列表上有一个非常相似的问题,但我找不到在此发布的链接。所以这里是答案的一部分:

  

&#34;在内部,Flink Kafka连接器不使用使用者组   管理功能,因为他们使用较低级别的API   (SimpleConsumer在0.8中,KafkaConsumer #assign(...)在0.9中)   并行实例,用于更好地控制单个分区   消费。所以,基本上,Flink中的“group.id”设置   Kafka连接器仅用于将偏移量提交回ZK / Kafka   经纪人&#34;

也许这可以为你澄清一些事情。

此外,还有一篇关于与Flink和Kafka合作的博客文章可能会对您有所帮助(https://data-artisans.com/blog/kafka-flink-a-practical-how-to)。

答案 1 :(得分:-1)

由于没有太多使用flink kafka消费者的group.id而不是对zookeeper提交抵消。就flink kafka消费者而言,是否存在任何偏移监控方式。我可以看到有一种方法[在消费者群体/消费者偏移检查器的帮助下]用于控制台消费者,但不适用于flink kafka消费者。

我们希望看到我们的flink kafka消费者如何落后/滞后于kafka主题大小[在给定时间点主题中的消息总数],可以将其置于分区级别。