簡體   English   中英

Confluent Kafka Python 生產者不使用 ACKS= 所有配置生產

[英]Confluent Kafka Python producer not producing with ACKS= all configuration

我有一些 python 代碼可以生成一個 kafka 主題,這在默認設置acks=1下工作正常,但是當我更改為acks=allacks=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 只能有三個值:

  1. acks = 1 :這是默認值,只有領導者將消息寫入其日志,但會在不等待所有追隨者完全確認的情況下做出響應。
  2. acks = 0 :生產者根本不會等待來自服務器的任何確認。 該記錄將立即添加到套接字緩沖區並視為已發送。
  3. acks =all :這意味着領導者將等待完整的同步副本集來確認記錄。 這保證了只要至少一個同步副本保持活動狀態,記錄就不會丟失。 這是最強的可用保證。

此外,在您的min.insyn.replica指定一個有效值,該值應包含編號。 包括領導者在內的副本。

例如,如果您的復制因子為 4,並且您的 min.insync.replica = 3,則它是 acks=all 的有效配置。

  1. 確認:2 - 不允許。

在認為請求完成之前,生產者要求領導者收到的確認數。 允許值:0 表示無確認,1 表示僅領導者和 -1(或all )表示完整 ISR。

  1. 你必須檢查,主題級別的配置。 有兩個參數是相關的。
    min.insync.replicas(ISR) <= replication-factor

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM