【问题标题】:Clarification on the --broker-list option and --bootstrap-server option in Kafka-console producer and consumer respectively分别对 Kafka-console 生产者和消费者中的 --broker-list 选项和 --bootstrap-server 选项进行说明
【发布时间】:2019-01-14 08:25:59
【问题描述】:

在 Kafka-console-producer 中,--broker-list 获取服务器列表。 生产者是否连接到所有这些? (或者) 生产者是否使用服务器列表来连接其中一个,如果那个失败,切换到下一个,依此类推?

同样,在 Kafka-console-consumer 中,--bootstrap-server 获取 Kafka 服务器列表。如果有两个 Kafka 服务器,是否需要在 --bootstrap-server 中同时指定它们? 我尝试使用一台服务器 (Kafka-server1) 运行消费者,当我停止 Kafka-server1 时,它继续接收主题的数据。

【问题讨论】:

  • 欢迎使用帖子旁边的复选标记接受答案

标签: apache-kafka


【解决方案1】:

他们都行动/是相同的。

如果您查看 Kafka 源代码,您会看到这两个选项导致相同的 "bootstrap.servers" 配置属性

  def producerProps(config: ProducerConfig): Properties = {
    val props =
      if (config.options.has(config.producerConfigOpt))
        Utils.loadProps(config.options.valueOf(config.producerConfigOpt))
      else new Properties

    props ++= config.extraProducerProps

    props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, config.brokerList) // <---- brokerList is passed as BOOTSTRAP_SERVER

消费者和生产者都将以循环方式连接到提供的地址列表,以创建与 Kafka 控制器的初始“引导”连接,该控制器了解给定时间集群中所有可用的代理。为高可用性提供至少 3 个是很好的做法。


如果有两个 Kafka 服务器,我需要在 --bootstrap-server 中指定它们吗?

关于有多个地址可供使用,在云环境中,您可能在可用区上有代理,建议每个可用区至少列出 2 个代理,因此 3 个区域总共有 6 个。

可以使用负载平衡器/反向代理将提供给客户端的地址简化为单个kafka.your.network:9092 地址,但随后您将引入额外的 DNS 和网络跃点来确定连接,以便拥有一个,众所周知,地址。

在任何情况下,代理的所有可用地址都将交给客户端,然后在本地缓存。

但是,重要的是要认识到所有发送/轮询请求只会与 TopicPartition 的单一领导者通信,无论您提供多少地址以及主题将拥有多少副本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 2018-02-05
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 2018-02-08
    相关资源
    最近更新 更多