合流kafka python producer未使用acks=all配置生成

pxyaymoc  于 2021-06-06  发布在  Kafka
关注(0)|答案(2)|浏览(537)

我有一些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"} 我试图在本地复制,但没有得到错误,但已经注意到这一点,而尝试。
谢谢

e0bqpujr

e0bqpujr1#

acks只能有三个值: acks = 1 :这是默认值,只有领导者将消息写入其日志,但不会等待所有追随者的完全确认。 acks = 0 :生产者根本不会等待服务器的任何确认。记录将立即添加到套接字缓冲区并被视为已发送。 acks =all :这意味着领导者将等待全套同步副本确认记录。这保证了只要至少有一个同步副本保持活动状态,记录就不会丢失。这是最有力的保证。
另外,请在 min.insyn.replica 其中应包含包括引线在内的副本数。
例如,如果复制因子为4,而min.insync.replica=3,则它是acks=all的有效配置。

jmo0nnb3

jmo0nnb32#

1) acks:2-不允许。
在考虑请求完成之前,制作人要求领队收到的确认数。允许的值:0表示无确认,1表示仅负责人,1表示完整isr。
2) 你必须检查,主题级配置。两个参数是相关的。 min.insync.replicas(ISR) <= replication-factor

相关问题