卡夫卡偏移量不总是被提交

时间:2019-03-29 13:39:24

标签: apache-kafka apache-beam

我想向Kafka发送消息并阅读而无需自动提交。

我这样发送消息:

private Producer<Void, String> createProducer(String kafkaBootstrapServers) {
   return new KafkaProducer<>(
       ImmutableMap.of(
           ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaBootstrapServers,
           ProducerConfig.CLIENT_ID_CONFIG, UUID.randomUUID().toString()
       ),
       new VoidSerializer(),
       new StringSerializer());
}


private void sendToKafka(int partition, String... messages) {
    try (Producer<Void, String> producer = createProducer(kafkaContainerBootstrapServers)) {
        Arrays.stream(messages).forEach(
            message -> producer.send(new ProducerRecord<>(KAFKA_TOPIC, partition, null, message)));
    }
}

我是用Apache Beam从Kafka读的:

    KafkaIO.<Void, String>read()
            .withBootstrapServers(options.getKafkaBootstrapServers())
            .withProcessingTime()
            .withKeyDeserializer(VoidDeserializer.class)
            .withValueDeserializer(StringDeserializer.class)
            .updateConsumerProperties(new ImmutableMap.Builder<String, Object>()
                .put(ENABLE_AUTO_COMMIT_CONFIG, false)
                .put(AUTO_OFFSET_RESET_CONFIG, options.getKafkaConsumerOffsetReset())
                .put(GROUP_ID_CONFIG, options.getKafkaConsumerGroup())
                .build())
            .withConsumerFactoryFn(new ConsumerFactoryFn())
            .commitOffsetsInFinalize()
            .withReadCommitted();

但是偏移量并不总是提交。

我使用此命令查看偏移量:

bin/kafka-console-consumer.sh --formatter "kafka.coordinator.group.GroupMetadataManager\$OffsetsMessageFormatter" --bootstrap-server localhost:43881 --topic __consumer_offsets --from-beginning

我有三个分区。

首先,我需要为一个分区发送10条以上的消息,以查看该分区的偏移量(不知道为什么)。当我有一个分区并发送11条消息时,一切都很好。

[group,test,0]::OffsetAndMetadata(offset=10, leaderEpoch=Optional.empty, metadata=, commitTimestamp=1553866358077, expireTimestamp=Some(1554471158077))

第二,有时即使每个分区发送11条消息(从1个分区更改为3个分区后),每个分区也没有偏移。

0 个答案:

没有答案