[英]Confluent Kafka Python producer not producing with ACKS= all configuration
我有一些 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"}
我試圖在本地進行頂級復制,但沒有收到錯誤但在嘗試時注意到了這一點。
謝謝
acks 只能有三個值:
acks = 1
:這是默認值,只有領導者將消息寫入其日志,但會在不等待所有追隨者完全確認的情況下做出響應。acks = 0
:生產者根本不會等待來自服務器的任何確認。 該記錄將立即添加到套接字緩沖區並視為已發送。acks =all
:這意味着領導者將等待完整的同步副本集來確認記錄。 這保證了只要至少一個同步副本保持活動狀態,記錄就不會丟失。 這是最強的可用保證。 此外,在您的min.insyn.replica
指定一個有效值,該值應包含編號。 包括領導者在內的副本。
例如,如果您的復制因子為 4,並且您的 min.insync.replica = 3,則它是 acks=all 的有效配置。
在認為請求完成之前,生產者要求領導者收到的確認數。 允許值:0 表示無確認,1 表示僅領導者和 -1(或
all
)表示完整 ISR。
min.insync.replicas(ISR) <= replication-factor
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.