Vis*_*esh 147 producer apache-kafka
我正在尝试使用Kafka.所有配置都正确完成但当我尝试从控制台生成消息时,我不断收到以下错误
WARN Error while fetching metadata with correlation id 39 :
{4-3-16-topic1=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)
Run Code Online (Sandbox Code Playgroud)
kafka版本:2.11-0.9.0.0
有人可以帮忙,因为我无法在任何地方找到任何解决方案吗?
Ale*_*aga 81
它可能与advertised.host.name
你的设置有关server.properties
.
什么可能发生的是,你的制作人试图找出谁是给定分区中的佼佼者,计算出其advertised.host.name
与advertised.port
和尝试连接.如果未正确配置这些设置,则可能会认为领导者不可用.
小智 69
我尝试了这里列出的所有建议.对我有用的是去server.properties
并添加:
port = 9092
advertised.host.name = localhost
Run Code Online (Sandbox Code Playgroud)
离开listeners
并advertised_listeners
注释掉.
Vla*_*rin 37
我让kafka作为Docker容器运行,类似的消息充斥着日志.
而KAFKA_ADVERTISED_HOST_NAME
被设置为"卡夫卡".
在我的情况下,错误的原因是/etc/hosts
'kafka'容器本身缺少'kafka'的记录.
因此,例如,ping kafka
在'kafka'容器内运行会失败ping: bad address 'kafka'
就Docker而言,通过指定hostname
容器来解决此问题.
实现它的选项:
docker run --hostname ...
docker run -it --add-host ...
hostname
在docker-compose中hostname
在AWS EC2任务定义中小智 34
为我解决的是设置如下的监听器:
advertised.listeners = PLAINTEXT://my.public.ip:9092
listeners = PLAINTEXT://0.0.0.0:9092
Run Code Online (Sandbox Code Playgroud)
这使得KAFKA经纪人可以监听所有接口.
小智 22
我正在使用kafka_2.12-0.10.2.1:
vi config/server.properties
添加以下行:
listeners=PLAINTEXT://localhost:9092
Run Code Online (Sandbox Code Playgroud)
经纪人将向生产者和消费者宣传的主机名和端口.如果没有设定,
.否则,它将使用从java.net.InetAddress.getCanonicalHostName()返回的值.
停止卡夫卡经纪人:
bin/kafka-server-stop.sh
Run Code Online (Sandbox Code Playgroud)
重启经纪人:
bin/kafka-server-start.sh -daemon config/server.properties
Run Code Online (Sandbox Code Playgroud)
现在你不应该看到任何问题.
Luc*_*ini 17
在与卡夫卡合作的过去两周里,我一直在目睹同样的问题,从那以后一直在阅读这篇Stackoverflow的帖子.
经过2周的分析后,我推断出在我的情况下,当尝试为不存在的主题生成消息时会发生这种情况.
在我的案例中,结果是Kafka发回错误消息,但同时创建了之前不存在的主题.因此,如果我在此事件之后尝试再次为该主题生成任何消息,则该错误将不再显示为已创建的主题.
请注意:可能是我的特定Kafka安装被配置为在不存在的情况下自动创建主题,这解释了为什么在我的情况下我在一开始只看到一次问题:您的配置可能不同并且在那种情况下你会一遍又一遍地犯同样的错误.
问候,
卢卡坦佩利尼
Rya*_*Kay 12
当我们尝试订阅尚未创建的主题时,我们倾向于收到此消息.我们通常依赖于在我们部署的环境中先验创建的主题,但我们有针对dockerized kafka实例运行的组件测试,每次都会启动干净.
在这种情况下,我们在测试设置中使用AdminUtils来检查主题是否存在,如果不存在则创建它.有关设置AdminUtils的更多信息,请参阅此其他堆栈溢出.
就我而言,它在家里运行良好,但在我连接到办公室网络的那一刻,它在办公室出现故障。
所以将 config/server.properties listeners=PLAINTEXT://:9092 修改为 listeners=PLAINTEXT://localhost:9092
就我而言,我在描述消费者组时得到了
对于任何试图在kubernetes上运行kafka并遇到此错误的人来说,这就是最终为我解决的问题:
你必须要么:
hostname
到pod规范,kafka可以找到自己的方式.要么
hostPort
,那么你需要hostNetwork: true
和dnsPolicy: ClusterFirstWithHostNet
这是因为Kafka需要与自己交谈,并决定使用'广告'的监听器/主机名来查找自己,而不是使用localhost.即使您有一个服务指出广告主机名在广告连播中,它也不会从广告连播中看到.我真的不知道为什么会这样,但至少有一个解决方法.
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: zookeeper-cluster1
namespace: default
labels:
app: zookeeper-cluster1
spec:
replicas: 1
selector:
matchLabels:
app: zookeeper-cluster1
template:
metadata:
labels:
name: zookeeper-cluster1
app: zookeeper-cluster1
spec:
hostname: zookeeper-cluster1
containers:
- name: zookeeper-cluster1
image: wurstmeister/zookeeper:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 2181
- containerPort: 2888
- containerPort: 3888
---
apiVersion: v1
kind: Service
metadata:
name: zookeeper-cluster1
namespace: default
labels:
app: zookeeper-cluster1
spec:
type: NodePort
selector:
app: zookeeper-cluster1
ports:
- name: zookeeper-cluster1
protocol: TCP
port: 2181
targetPort: 2181
- name: zookeeper-follower-cluster1
protocol: TCP
port: 2888
targetPort: 2888
- name: zookeeper-leader-cluster1
protocol: TCP
port: 3888
targetPort: 3888
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: kafka-cluster
namespace: default
labels:
app: kafka-cluster
spec:
replicas: 1
selector:
matchLabels:
app: kafka-cluster
template:
metadata:
labels:
name: kafka-cluster
app: kafka-cluster
spec:
hostname: kafka-cluster
containers:
- name: kafka-cluster
image: wurstmeister/kafka:latest
imagePullPolicy: IfNotPresent
env:
- name: KAFKA_ADVERTISED_LISTENERS
value: PLAINTEXT://kafka-cluster:9092
- name: KAFKA_ZOOKEEPER_CONNECT
value: zookeeper-cluster1:2181
ports:
- containerPort: 9092
---
apiVersion: v1
kind: Service
metadata:
name: kafka-cluster
namespace: default
labels:
app: kafka-cluster
spec:
type: NodePort
selector:
app: kafka-cluster
ports:
- name: kafka-cluster
protocol: TCP
port: 9092
targetPort: 9092
Run Code Online (Sandbox Code Playgroud)
添加此内容可能会帮助其他人。常见问题可能是的配置错误advertised.host.name
。使用docker-compose进行Docker设置时,KAFKA_ADVERTISED_HOST_NAME
除非您也设置了主机名,否则将无法在其中设置服务的名称。docker-compose.yml
例:
kafka:
image: wurstmeister/kafka
ports:
- "9092:9092"
hostname: kafka
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka
KAFKA_CREATE_TOPICS: "test:1:1"
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)
上面没有尝试连接时hostname: kafka
会发出一个LEADER_NOT_AVAILABLE
。您可以在此处找到有效docker-compose
配置的示例
如果您在本地机器上运行 kafka,请尝试使用以下行更新 $KAFKA_DIR/config/server.properties:
listeners=PLAINTEXT://localhost:9092
然后重新启动 kafka。
归档时间: |
|
查看次数: |
136720 次 |
最近记录: |