J'ai essayé de déployer Kafka avec un registre de schéma localement à l'aide de Kubernetes. Cependant, les journaux du pod de registre de schéma affichent ce message d'erreur:
apiVersion: v1
kind: Service
metadata:
name: zookeeper
spec:
ports:
- name: client
port: 2181
selector:
app: zookeeper
---
apiVersion: v1
kind: Service
metadata:
name: zookeeper-1
spec:
ports:
- name: client
port: 2181
- name: followers
port: 2888
- name: election
port: 3888
selector:
app: zookeeper
server-id: "1"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: zookeeper-1
spec:
selector:
matchLabels:
app: zookeeper
server-id: "1"
replicas: 1
template:
metadata:
labels:
app: zookeeper
server-id: "1"
spec:
volumes:
- name: data
emptyDir: {}
- name: wal
emptyDir:
medium: Memory
containers:
- name: server
image: elevy/zookeeper:v3.4.7
env:
- name: MYID
value: "1"
- name: SERVERS
value: "zookeeper-1"
- name: JVMFLAGS
value: "-Xmx2G"
ports:
- containerPort: 2181
- containerPort: 2888
- containerPort: 3888
volumeMounts:
- mountPath: /zookeeper/data
name: data
- mountPath: /zookeeper/wal
name: wal
Quelle pourrait être la raison de ce comportement? ' Afin d'exécuter Kubernetes localement, j'utilise la version Minikube v0.32.0 avec la version Kubernetes v1.13.0
Ma configuration Kafka:
apiVersion: v1
kind: Service
metadata:
name: kafka-1
spec:
ports:
- name: client
port: 9092
selector:
app: kafka
server-id: "1"
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: kafka-1
spec:
selector:
matchLabels:
app: kafka
server-id: "1"
replicas: 1
template:
metadata:
labels:
app: kafka
server-id: "1"
spec:
volumes:
- name: kafka-data
emptyDir: {}
containers:
- name: server
image: confluent/kafka:0.10.0.0-cp1
env:
- name: KAFKA_ZOOKEEPER_CONNECT
value: zookeeper-1:2181
- name: KAFKA_ADVERTISED_HOST_NAME
value: kafka-1
- name: KAFKA_BROKER_ID
value: "1"
ports:
- containerPort: 9092
volumeMounts:
- mountPath: /var/lib/kafka
name: kafka-data
---
apiVersion: v1
kind: Service
metadata:
name: schema
spec:
ports:
- name: client
port: 8081
selector:
app: kafka-schema-registry
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: kafka-schema-registry
spec:
replicas: 1
selector:
matchLabels:
app: kafka-schema-registry
template:
metadata:
labels:
app: kafka-schema-registry
spec:
containers:
- name: kafka-schema-registry
image: confluent/schema-registry:3.0.0
env:
- name: SR_KAFKASTORE_CONNECTION_URL
value: zookeeper-1:2181
- name: SR_KAFKASTORE_TOPIC
value: "_schema_registry"
- name: SR_LISTENERS
value: "http://0.0.0.0:8081"
ports:
- containerPort: 8081
Configuraion Zookeeper:
ERROR Server died unexpectedly: (io.confluent.kafka.schemaregistry.rest.SchemaRegistryMain:51) org.apache.kafka.common.errors.TimeoutException: Timeout expired while fetching topic metadata
3 Réponses :
security.protocol=SSL
@AdrianMitev J'utilisais Spring-boot Kafka, donc j'ai fini par utiliser les propriétés d'application par défaut de spring-boot pour configurer la connexion. Mon erreur est venue d'essayer de créer une classe @Configuration pour créer la connexion et cela m'a donné l'erreur de délai d'expiration.
Cela a résolu le problème pour moi. Le courtier (que je ne contrôle pas) a été configuré pour toujours utiliser le port 9092 , mais avec SSL activé. J'avais supposé que c'était du texte en clair. Merci Anders!
Je vous remercie! Dans mon cas, j'avais mal configuré un service dans Kubernetes qui attendait une variable d'environnement facultative contenant une clé API en cas de connexion via SSL, et mon secret a été mal nommé. Parce que je l'ai ensuite pointé vers un point de terminaison SSL, je me suis retrouvé avec ce délai. Bien que je ne sois pas familier avec le protocole Kafka, je pense que le client attendait que le serveur dise bonjour et que le serveur s'attendait à ce que le client effectue une poignée de main SSL.
Une fois, j'ai résolu ce problème en redémarrant ma machine, mais cela s'est reproduit et je ne voulais pas redémarrer ma machine, donc je l'ai corrigé avec cette propriété dans le fichier server.properties
advertised.listeners=PLAINTEXT://localhost:9092
La récupération des métadonnées des sujets par Kafka échoue pour deux raisons:
Raison 1 Si le serveur d'amorçage n'accepte pas vos connexions, cela peut être dû à un problème de proxy comme un VPN ou certains groupes de sécurité au niveau du serveur.
Raison 2: Non-concordance dans le protocole de sécurité où l'attendu peut être SASL_SSL et le réel peut être SSL. ou l'inverse ou il peut être PLAIN.
À propos, les images Docker
confluent /sont obsolètes. Etconfluentinc /sont préférés. Et mentionné précédemment, rencontrez-vous des problèmes avec les graphiques Helm? docs.confluent.io/current/installation/ installant_cp /…Je n'ai pas de problèmes avec les graphiques Helm. J'ai besoin de déployer des solutions Kafka personnalisées sans Helm, c'est pourquoi j'essaye de le faire
Cependant, je ne vois rien de très personnalisé. Kafka n'est vraiment installé que d'une seule manière, et peut-être que les valeurs de configuration sont un peu modifiées, mais toutes les applications personnalisées construites autour de Kafka + Schema Registry peuvent être définies dans des fichiers YAML séparés