如何在kafka-console-producer中启用幂等性?

时间:2018-12-24 10:38:50

标签: apache-kafka kafka-producer-api

我正在尝试在kafka-console-producer上启用“幂等”选项。 请参考以下链接:

使用的命令:

$KAFKA_HOME/bin/kafka-console-producer.sh --broker-list node1.com:6667 --topic my_topic --security-protocol SASL_PLAINTEXT --producer-property acks=all --producer-property retries=Integer.MAX_VALUE --producer-property enable.idempotence=true

观察到以下异常:

  

org.apache.kafka.common.KafkaException:无法构造kafka   制片人           在org.apache.kafka.clients.producer.KafkaProducer。(KafkaProducer.java:433)           在org.apache.kafka.clients.producer.KafkaProducer。(KafkaProducer.java:291)           在kafka.producer.NewShinyProducer。(BaseProducer.scala:40)           在kafka.tools.ConsoleProducer $ .main(ConsoleProducer.scala:50)           在kafka.tools.ConsoleProducer.main(ConsoleProducer.scala)导致原因:org.apache.kafka.common.config.ConfigException:必须设置   为了使用幂等生产者,所有人都应采取行动。不然我们   不能保证幂等。           在org.apache.kafka.clients.producer.KafkaProducer.configureAcks(KafkaProducer.java:510)           在org.apache.kafka.clients.producer.KafkaProducer。(KafkaProducer.java:375)

尽管acks已经设置为“ all”,但我们观察到此异常。 我想念什么?

以下是所使用的版本:

  • 经纪人-1.0.0
  • 客户端-与代理1.0.0捆绑在一起的控制台生产者

更新

我可以使用回复中建议的--request-required-acks -1选项在控制台生产者上启用幂等性。

但是,我得到了ClusterAuthorizationException。

bash$ $KAFKA_HOME/bin/kafka-console-producer.sh --broker-list borker1:6667 --topic my_topic --producer-property enable.idempotence=true  --request-required-acks -1  --security-protocol SASL_PLAINTEXT --property "parse.key=true" --property "key.separator=:"
>key1:value1
>[2018-12-26 04:00:56,074] ERROR [Producer clientId=console-producer] Aborting producer batches due to fatal error (org.apache.kafka.clients.producer.internals.Sender)
org.apache.kafka.common.errors.ClusterAuthorizationException: Cluster authorization failed.
[2018-12-26 04:00:56,080] ERROR Error when sending message to topic orm_c1_prv_non_sepa_ci with key: 4 bytes, value: 6 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.ClusterAuthorizationException: Cluster authorization failed.

仅当启用幂等选项时,才会发生此异常。如果不使用此选项,则可以生成消息。

bash$ $KAFKA_HOME/bin/kafka-console-producer.sh --broker-list broker1:6667 --topic my_topic --security-protocol SASL_PLAINTEXT --property "parse.key=true" --property "key.separator=:"
>key1:value1
>key2:value2

我想念什么?

1 个答案:

答案 0 :(得分:1)

您无法为ConsoleProducer设置acksproducer-property。改为使用request-required-acks,如下所示:

  

bin / kafka-console-producer.sh --broker-list localhost:9092 --topic测试--producer-property enable.idempotence = true --request-required-acks -1