Kafka Consumer poll()在while

时间:2016-11-23 11:59:34

标签: java apache-kafka kafka-consumer-api

我有一个Kafka Consumer的基本实现。当按钮点击时调用 poll() 方法时,我可以正常工作(让我们称之为 V1 )。

但是,只要我将 poll() 方法置于 while 循环中(让我们称之为 V2 ),我停止接收消息。

奇怪的是 V1 仍然能够接收新消息,但 V2 仍然会收到空的ConsumerRecords对象。

我确保 V1 V2 位于不同的 ConsumerGroups

此处, V2 包含如下所示的代码。

V1 删除了 while 循环。否则就会有没有其他不同点。

有人可以告诉我发生了什么以及为什么会这样做吗?

代码转载如下:

btnButton.addMouseListener(new MouseAdapter() {
    public void mouseClicked(MouseEvent arg0){
         while(true) {
             ConsumerRecords<String, String> records = consumerGroupObj.consumerObj.poll(100);

             // Trying to insert into DefaultTableModel here for an existing jTable

             // Some other processing code
         }
    }
}

更新

我注意到了一些事情。它可能不是导致此问题的 poll() 方法。但是封闭的 eventHandler 。请检查上面提供的代码以获取更新。

我注意到,在控件退出此 mouseClicked() 方法之前,内部代码所做的更改在GUI中不可见。

所以,我的新问题:如何让Kafka消费者在按钮点击事件启动的无限循环中运行?

2 个答案:

答案 0 :(得分:0)

空结果可能由短暂的超时参数引起,您可以尝试增加它。

  

timeout - 数据所在的轮询等待时间(以毫秒为单位)   缓冲区中没有。

答案 1 :(得分:0)

我发现(通过一个非常复杂的搜索)不能在事件监听器中有一个循环,原因现在看来非常明显。

话虽如此,我确实发现我可以使用扩展SwingWorker类的类。

基本上,我所做的就是删除mouseClicked()方法中的所有代码,并将其放在doInBackground()类的SwingWorker方法中。显然,这造成了很多错误。

要解决这些错误,我需要将所需的所有信息从GUI组件传递到SwingWorker类。我是通过使用参数化构造函数来完成的。

之后,我只使用正确的值实例化SwingWorker类并执行该对象。 Et Voila!