我正在尝试在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”,但我们观察到此异常。 我想念什么?
以下是所使用的版本:
更新
我可以使用回复中建议的--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
我想念什么?
答案 0 :(得分:1)
您无法为ConsoleProducer设置acks
至producer-property
。改为使用request-required-acks
,如下所示:
bin / kafka-console-producer.sh --broker-list localhost:9092 --topic测试--producer-property enable.idempotence = true --request-required-acks -1