你的Kafka连不上、Topic创建不了?可能是这些参数没设置对!

前言

Kafka是一种分布式流平台,广泛用于大数据处理和实时流处理任务。它的核心功能之一就是支持高效的消息传递和流数据的处理,尤其在微服务架构中,Kafka被用作事件流的主要通道。为了实现稳定、安全、可靠的数据传输,Kafka提供了多种配置选项来调节其网络行为。在这些配置项中,有几个参数尤其重要:listenersadvertised.listenerslistener.security.protocol.mapinter.broker.listener.name

这些配置项的功能看似简单,但在大规模的分布式环境下,它们的正确配置关系着Kafka集群的性能、安全性及互操作性。本文将深入解析这几个配置项的含义、作用以及它们之间的相互关系,帮助你更好地理解并应用Kafka的配置。


详细内容

1. listeners

  • 概念listeners配置指定了Kafka监听客户端连接的网络接口及端口。Kafka允许通过不同的协议和端口与外部进行通信,listeners参数指定了这些接口。

  • 配置示例

    listeners=PLAINTEXT://0.0.0.0:9092
    

    这个配置表示Kafka监听所有网络接口上的9092端口,使用PLAINTEXT协议(无加密)。

  • 重要性:此配置决定了Kafka集群对外暴露的网络接口,若集群具有多个网络接口或者需要配置不同协议(如SSL或SASL认证),则listeners配置尤为重要。

  • 应用场景:在一些场景中,例如开发环境或者测试环境中,可能只需要一个监听端口和协议。但是在生产环境中,你可能需要为Kafka集群配置多个监听器,以应对不同的安全需求或网络拓扑。

2. advertised.listeners

  • 概念advertised.listeners配置告诉客户端如何连接到Kafka集群。虽然listeners定义了Kafka集群接受连接的地址,但客户端可能无法直接访问这个地址,尤其是在使用NAT(网络地址转换)或者跨多个网络区域时,advertised.listeners提供了对客户端可访问的地址。

  • 配置示例

    advertised.listeners=PLAINTEXT://kafka.example.com:9092
    

    这表示Kafka集群会将kafka.example.com:9092作为集群对外的可访问地址。

  • 重要性advertised.listeners是解决网络拓扑中客户端与Kafka集群间连接问题的关键配置。特别是在集群节点处于不同网络环境时,advertised.listeners使客户端能够正确连接。

  • 应用场景:例如,Kafka集群中的节点可能部署在内网,而外部客户端需要通过一个负载均衡器或者反向代理访问Kafka,advertised.listeners可以用于提供对外暴露的域名和端口。

3. listener.security.protocol.map

  • 概念listener.security.protocol.map配置用来为每个listener定义一个安全协议。Kafka支持多种安全协议,如PLAINTEXTSSLSASL_PLAINTEXTSASL_SSL。此配置允许为每个监听器指定不同的安全协议。

  • 配置示例

    listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SSL:SSL
    

    这个配置意味着PLAINTEXT协议的监听器使用PLAINTEXT安全协议,而SSL协议的监听器使用SSL安全协议。

  • 重要性:在生产环境中,数据传输的安全性至关重要,特别是在公共网络上传输敏感数据时,必须使用加密协议(如SSL)。listener.security.protocol.map允许为不同的连接设置不同的安全级别。

  • 应用场景:例如,你可能需要为内网流量使用PLAINTEXT协议,而为外网流量使用SSL协议。这时,listener.security.protocol.map提供了配置灵活性。

4. inter.broker.listener.name

  • 概念inter.broker.listener.name指定集群内部节点之间使用的监听器。Kafka集群中的各个Broker节点需要通过内部的通信协议互相交换元数据、处理分区迁移等任务。inter.broker.listener.name配置了Kafka内部通信使用的监听器名称。

  • 配置示例

    inter.broker.listener.name=INTERNAL
    

    这个配置表示集群内部的通信将使用名为INTERNAL的监听器。

  • 重要性:此配置项的设置对于集群内部通信的隔离至关重要。通常,内部通信会使用私有网络或安全的协议进行,以防止泄漏敏感信息。

  • 应用场景:在多网卡或多子网环境中,可以将集群内部流量与外部流量分开,以提高安全性和网络性能。例如,可以为集群内部通信配置专用的SSL协议,而外部通信使用PLAINTEXT协议。

5. 它们的关联性

  • listenersadvertised.listeners的关系:
    • listeners定义Kafka接受连接的地址,而advertised.listeners告诉客户端如何连接到Kafka集群。这两个配置项互为补充。
  • listenerslistener.security.protocol.map的关系:
    • listeners定义了Kafka监听的端口和协议,而listener.security.protocol.map为每个协议指定了具体的安全协议。两者结合决定了Kafka集群的网络安全策略。
  • inter.broker.listener.name的角色:
    • inter.broker.listener.namelisteners不同,它影响的是集群内部节点之间的通信。这个配置帮助将内部流量与外部流量进行隔离,确保集群在通信时不会泄漏敏感信息。

连接不上示例

初始连接

这里以springboot项目为例子

spring:
  kafka:
    bootstrap-servers: localhost:17124,localhost:17125,localhost:17126

在Spring Boot应用程序中,spring.kafka.bootstrap-servers配置项指定了Kafka集群的引导服务器(Bootstrap Servers)。具体来说:

主要作用:

bootstrap-servers定义了一组Kafka broker的地址,客户端通过这些地址与Kafka集群进行通信。引导服务器是Kafka集群的初始连接点,它们并不需要包含集群中的所有Broker节点,客户端在连接到这些引导服务器后,会通过它们获取集群的元数据(包括其他Broker的地址、Topic信息、分区信息等),然后与其他Broker进行后续的通信。

配置项解析:
spring:
  kafka:
    bootstrap-servers: localhost:17124,localhost:17125,localhost:17126
  • localhost:17124, localhost:17125, localhost:17126

    :这三个地址是Kafka集群中的Broker节点的地址,通常是集群中多个节点的地址。Spring Kafka客户端会通过这些地址之一尝试建立连接。

    • localhost 是Kafka Broker所在的机器的地址(通常是主机名或者IP地址)。
    • 171241712517126 是Kafka Broker监听的端口号。
工作原理:
  1. 当Kafka客户端(如生产者或消费者)启动时,它会先尝试连接到bootstrap-servers中列出的任意一个Kafka broker(这些通常是集群中的任意几个节点,客户端不需要知道集群中所有的节点)。
  2. 客户端成功连接到这些引导服务器后,会通过它们获取整个Kafka集群的元数据,包括所有Broker的地址、Topic、分区等信息。
  3. 客户端然后会与其他Kafka Broker进行通信,执行读写操作。

如果这里连接不上:问题就是ip和端口不可达,你排查的方向也是这里,如果是容器部署,要看看映射的端口是否一致,防火墙端口是否开启

创建topic超时或不可达

这里和上面有区别的,上面是获取相关信息,下面就是对broker进行操作了

重点关注advertised.listeners配置即可

我的报错是不知道acowbo-data-center-kafka-one,然后我去看了配置文件server.properties如下

image-20250109111445449

这是我一开始部署的,直接使用了容器名称,不在同一个docker网络下无法访问

重点

重点强调几个问题

1、在advertised.listeners中的每一个前缀都要不同,否则会报错,比如我用了PLAINTEXT

2、在advertised.listeners中的每一个前缀在listener.security.protocol.map中都要存在,否则也会报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值