Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 添加空处理器时,Kafka Streams处理速度减慢_Java_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Java 添加空处理器时,Kafka Streams处理速度减慢

Java 添加空处理器时,Kafka Streams处理速度减慢,java,apache-kafka,apache-kafka-streams,Java,Apache Kafka,Apache Kafka Streams,考虑一下这个卡夫卡流驱动程序 public class TestDriver { private static final String SOURCE = "SOURCE"; public static void main(String[] args) throws Exception { ProtoDeserializer<Message> protoDeserializer = new ProtoDeserializer<>(Me

考虑一下这个卡夫卡流驱动程序

public class TestDriver {

    private static final String SOURCE = "SOURCE";

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

        ProtoDeserializer<Message> protoDeserializer = new ProtoDeserializer<>(Message.parser());
        ProtoSerializer<Message> protoSerializer = new ProtoSerializer<>();

        StringDeserializer stringDerializer = new StringDeserializer();
        StringSerializer stringSerializer = new StringSerializer();

        Topology topologyBuilder = new Topology();
        topologyBuilder.addSource(SOURCE, stringDerializer, protoDeserializer, "input-messages")

            .addProcessor(DummyProcessor.NAME, DummyProcessor::new, SOURCE)

            .addSink("MAIN", "output-messages", stringSerializer, protoSerializer, DummyProcessor.NAME)
        ;

        KafkaStreams streams = new KafkaStreams(topologyBuilder, getConfig());
        streams.cleanUp();
        streams.start();

        System.out.println(streams.toString());

        Runtime.getRuntime().addShutdownHook(new Thread(streams::close));

    }

    private static Properties getConfig() {
        Properties config = new Properties();
        config.put(StreamsConfig.CLIENT_ID_CONFIG, "test.stream-processor");
        config.put(StreamsConfig.APPLICATION_ID_CONFIG, "test.stream-processor");
        config.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "broker-1:9092,broker-2:9092,broker-3:9092");
        config.put(StreamsConfig.REPLICATION_FACTOR_CONFIG, 3);
        config.put(StreamsConfig.NUM_STREAM_THREADS_CONFIG, 10);
        config.put(StreamsConfig.DEFAULT_TIMESTAMP_EXTRACTOR_CLASS_CONFIG, WallclockTimestampExtractor.class);
        return config;
    }
}
添加单个“空”处理器是否会对Streams性能造成如此大的开销?原因是什么?Kafka Streams是否如此智能,以至于当没有处理器时,它不会执行protobuf serde,而只转发接收到的数据?无论如何,要加快速度吗


有了这样的速度,我需要更多x千个cpu线程来处理我所有的数据,因为25k消息/秒是我拥有的数据的1%。这听起来太多了。

问题是因为经常请求提交

您根本不需要调用
ProcessorContext:commit()
。 卡夫卡流基于
commit.interval.ms
属性执行提交(默认为:
30000 ms
)。如果只设置了一次语义,则其值不同。您可以在中查看详细信息


如果在某些用例中需要更频繁地提交,则可以调用
ProcessorContext:commit()
。但您必须记住,提交不是立即(直接)进行的。它只设置一个标志,以便在可能的情况下尽快提交

问题是由于经常请求提交而导致的

您根本不需要调用
ProcessorContext:commit()
。 卡夫卡流基于
commit.interval.ms
属性执行提交(默认为:
30000 ms
)。如果只设置了一次语义,则其值不同。您可以在中查看详细信息


如果在某些用例中需要更频繁地提交,则可以调用
ProcessorContext:commit()
。但您必须记住,提交不是立即(直接)进行的。它只设置一个标志,以便在可能的情况下尽快提交

如果删除
context().commit(),性能是否会提高?@wardziniak是,明显为330k条消息/秒。我认为commit()是流工作所必需的(?)。然而,这似乎是瓶颈。如果删除
context().commit()?@wardziniak是,明显为330k条消息/秒。我认为commit()是流工作所必需的(?)。不过,这似乎是瓶颈。啊,我一点也没想到。现在一切都清楚了。可能最让我困惑的是,几乎所有的教程/视频/博客帖子/其他示例每次都调用
commit()
,所以我认为这是必要的。谢谢啊,我一点也没想到。现在一切都清楚了。可能最让我困惑的是,几乎所有的教程/视频/博客帖子/其他示例每次都调用
commit()
,所以我认为这是必要的。谢谢
public class DummyProcessor extends AbstractProcessor<String, Message> {

    public static final String NAME = "DUMMY_PROCESSOR";

    public void process(String key, Message originalMessage) {
        context().forward(key, originalMessage);
        context().commit();
    }
}