我有一些python代码,将生成一个kafka主题,这与默认设置很好 acks=1
但当我换成 acks=all
或者 acks=2
该消息不在主题中结束。这个 min.insync.replicas
主题的配置设置为 2
. 运行代码后没有返回错误消息,这让人困惑吗?集群中有3个代理。
这是密码
from confluent_kafka import Producer
from kafka.errors import KafkaError
def get_producer_config():
return Producer(get_config())
def get_config():
conf = {
'bootstrap.servers': 'localhost:9092',
'acks': '2',
}
return conf
try:
producer = get_producer_config()
producer.produce('test', 'test message from local app')
producer.flush()
except KafkaError as error:
get_logger().error(str(error))
这源于调试一个kafka生产者lambda,在那里我们得到了错误消息 KafkaError{code=NOT_ENOUGH_REPLICAS,val=19,str="Broker: Not enough in-sync replicas"}
我试图在本地复制,但没有得到错误,但已经注意到这一点,而尝试。
谢谢
2条答案
按热度按时间e0bqpujr1#
acks只能有三个值:
acks = 1
:这是默认值,只有领导者将消息写入其日志,但不会等待所有追随者的完全确认。acks = 0
:生产者根本不会等待服务器的任何确认。记录将立即添加到套接字缓冲区并被视为已发送。acks =all
:这意味着领导者将等待全套同步副本确认记录。这保证了只要至少有一个同步副本保持活动状态,记录就不会丢失。这是最有力的保证。另外,请在
min.insyn.replica
其中应包含包括引线在内的副本数。例如,如果复制因子为4,而min.insync.replica=3,则它是acks=all的有效配置。
jmo0nnb32#
1) acks:2-不允许。
在考虑请求完成之前,制作人要求领队收到的确认数。允许的值:0表示无确认,1表示仅负责人,1表示完整isr。
2) 你必须检查,主题级配置。两个参数是相关的。
min.insync.replicas(ISR) <= replication-factor