代码之家  ›  专栏  ›  技术社区  ›  Florian

使用固定/静态代理列表运行kafka producer

  •  0
  • Florian  · 技术社区  · 6 年前

    boostrap.servers

    我现在的问题是,如何在java客户机中禁用这个发现。我想要一个 KafkaProducer 使用我提供给它的代理列表作为固定的静态代理。

    再多一点背景

    我的Spring应用程序部署到的平台不允许internet访问任何端口,除非使用HTTP代理(443或80)。另一种方法是使用TCP代理,其工作原理类似于:

    • 代理提供应用程序可以连接到的主机名和端口
    • 连接后,数据流将被转发到先前(在创建代理期间)名为hostname和port的

    ----------------------         -------------         -----------------------
    | Application client |  <--->  | TCP Proxy |  <--->  | Target (e.g. kafka) |
    ----------------------         -------------         -----------------------
    

    但是,这个方法并不真正适用于我需要与之交谈的公共kafka集群,因为boostrap.servers服务器list(我可以很好地连接到它)将返回具有我无法连接到的公共端点名称的节点列表(因为它们不通过代理)。

    因此,我不想使用Kafka客户机的发现功能,而是希望使用一个固定的、预定义的代理列表,可以将其设置为使用TCP代理。不过,到目前为止,我还没有在API中看到任何解决方案,希望能在这里得到一些帮助。

    0 回复  |  直到 6 年前
        1
  •  0
  •   OneCricketeer Gabriele Mariotti    6 年前

    除非使用HTTP代理(443或80)。

    你考虑过使用 Confluent REST Proxy

    合流REST代理提供了一个到Kafka集群的RESTful接口,使得在不使用本机Kafka协议或客户端的情况下轻松地生成和使用消息、查看集群的状态和执行管理操作

    <dependency>
        <groupId>io.confluent</groupId>
        <artifactId>kafka-rest</artifactId>
        <version>5.3.2</version> 
    </dependency>
    

    也有一个特使代理解决方案在工作中- https://github.com/envoyproxy/envoy/issues/2852

    以及另一个用于k8s环境的TCP代理- https://github.com/grepplabs/kafka-proxy

        2
  •  0
  •   Jordan Pilat    6 年前

    却没有办法 不使用元数据请求 advertised.listeners 配置,它将允许您的内部网络代理公布您在代理上为特定代理配置的主机名和端口,以响应元数据请求。

    here

        3
  •  0
  •   Jordan Pilat    6 年前

    作为在其公布的主机名上直接连接到每个代理(这是Kafka功能所必需的)的替代方法,您还可以考虑设置1个或更多 Kafka REST proxies 在网络中,然后将代理指向该代理,或将代理指向负载平衡器,该负载平衡器在多个Kafka REST代理之间进行平衡。

    推荐文章