繁体   English   中英

kafka消费者Java具有多个主题

[英]kafka consumer java with multiple topics

我们有一个消费者组和三个主题,这三个主题都具有不同的架构。 通过一个for循环创建了一个使用者,一次传递了每个主题,并对其进行轮询并手动进行处理和提交。 使用的方法是用户创建的通用方法,在for循环中,我一次订阅一个主题并处理数据。 我看到了一个随机的用户延迟,尽管该主题具有我的用户未从该主题获取任何记录的数据,并且有时会获取该数据。 当我处理一个主题而不是遍历三个主题时,它可以工作但无法重现。 需要帮助调试问题并重现问题,

与其在一个方法中循环三个主题,不如创建一个骨架线程,以便从任何主题中使用。 在这里查看示例

我不能说这是否可以“解决”问题,但是尝试在一个应用程序中使用具有不同模式的主题通常不是可扩展的模式,但是还不清楚您要做什么。

class ConsumerThread extends Thread {

    KafkaConsumer consumer;
    AtomicBoolean stopped = new AtomicBoolean();

    ConsumerThread(Properties props, String subscribePattern) {
        this.consumer = new KafkaConsumer...
        this.consumer.subscribe(subscribePattern);
    } 

    @Override
    public void run() {
        while (!this.stopped.get()) {
            ... records = this.consumer.poll(100);
            for ( ... each record ... ) {
               // Process record
            } 
        }
    }

    public void stop() {
        this.stopped.set(true);
    }
}

不意味着是生产级的

然后独立运行三个消费者。

new ConsumerThread("t1").start();
new ConsumerThread("t2").start();
new ConsumerThread("t3").start();

注意KafkaConsumer不是线程安全的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM