当前位置: 首页 > 知识库问答 >
问题:

如何将OpenShift上的KSQLDB-Cluster连接到本地kerberize Kafka集群

丌官远
2023-03-14

我想实现的:
我们有一个本地Kafka集群。我想在OpenShift中设置KSQLDB并将其连接到本地Kafka集群的代理。

问题:
当我尝试使用命令"/usr/bin/ksql-server-start /etc/ksqldb/ksql-server.properties"启动KSQLDB服务器时,我得到错误消息:

[2020-05-14 15:47:48,519] ERROR Failed to start KSQL (io.confluent.ksql.rest.server.KsqlServerMain:60)
io.confluent.ksql.util.KsqlServerException: Could not get Kafka cluster configuration!
        at io.confluent.ksql.services.KafkaClusterUtil.getConfig(KafkaClusterUtil.java:90)
        at io.confluent.ksql.security.KsqlAuthorizationValidatorFactory.isKafkaAuthorizerEnabled(KsqlAuthorizationValidatorFactory.java:81)
        at io.confluent.ksql.security.KsqlAuthorizationValidatorFactory.create(KsqlAuthorizationValidatorFactory.java:51)
        at io.confluent.ksql.rest.server.KsqlRestApplication.buildApplication(KsqlRestApplication.java:624)
        at io.confluent.ksql.rest.server.KsqlRestApplication.buildApplication(KsqlRestApplication.java:544)
        at io.confluent.ksql.rest.server.KsqlServerMain.createExecutable(KsqlServerMain.java:98)
        at io.confluent.ksql.rest.server.KsqlServerMain.main(KsqlServerMain.java:56)
Caused by: java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.TimeoutException: Call(callName=listNodes, deadlineMs=1589471268517) timed out at 1589471268518 after 1 attempt(s)
        at org.apache.kafka.common.internals.KafkaFutureImpl.wrapAndThrow(KafkaFutureImpl.java:45)
        at org.apache.kafka.common.internals.KafkaFutureImpl.access$000(KafkaFutureImpl.java:32)
        at org.apache.kafka.common.internals.KafkaFutureImpl$SingleWaiter.await(KafkaFutureImpl.java:89)
        at org.apache.kafka.common.internals.KafkaFutureImpl.get(KafkaFutureImpl.java:260)
        at io.confluent.ksql.services.KafkaClusterUtil.getConfig(KafkaClusterUtil.java:60)
        ... 6 more
Caused by: org.apache.kafka.common.errors.TimeoutException: Call(callName=listNodes, deadlineMs=1589471268517) timed out at 1589471268518 after 1 attempt(s)
Caused by: org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment.

我的配置:
我根据此图像设置Dockerfile:https://hub.docker.com/r/confluentinc/ksqldb-server,端口9092、9093、8080、8082和443打开。

我的服务yaml如下所示:

kind: Service
apiVersion: v1
metadata:
  name: social-media-dev
  namespace: abc
  selfLink: xyz
  uid: xyz
  resourceVersion: '1'
  creationTimestamp: '2020-05-14T09:47:15Z'
  labels:
    app: social-media-dev
  annotations:
    openshift.io/generated-by: OpenShiftNewApp
spec:
  ports:
    - name: social-media-dev
      protocol: TCP
      port: 9092
      targetPort: 9092
      nodePort: 31364
  selector:
    app: social-media-dev
    deploymentconfig: social-media-dev
  clusterIP: XX.XX.XXX.XXX
  type: LoadBalancer
  externalIPs:
    - XXX.XX.XXX.XXX
  sessionAffinity: None
  externalTrafficPolicy: Cluster
status:
  loadBalancer:
    ingress:
      - ip: XX.XX.XXX.XXX

我的ksql服务器。属性文件包括以下信息:
侦听器:http://0.0.0.0:8082
引导。服务器:X.X.X.X:9092,X.X.X.Y:9092,X.X.X.Z:9092

到目前为止我所尝试的:

我试着从我的pod内连接到一个代理,它成功了:
(超时1 bash-c)

我还与监听器一起玩,但随后错误消息变短了,只显示了“无法获得Kafka群集配置!”并且没有超时错误。

我试图将LoadBalancer交换到Nodeport,但也没有成功。

你知道我接下来可以尝试什么吗?

更新:随着Cloudera CDH6的升级,Cloudera Kafka集群现在也可以与Kafka Streams一起工作。因此,我现在能够从Openshift中的KSQLDB集群连接到本地Kafka集群。


共有1个答案

翟冯浩
2023-03-14

更新:随着Cloudera CDH6的升级,Cloudera Kafka集群现在也可以与Kafka Streams一起工作。因此,我现在能够从Openshift中的KSQLDB集群连接到本地Kafka集群。

我还将在这里描述连接到kerberized Kafka集群的最后一种方式,因为我一直在努力使其运行:

  1. 获取Kerberos票据并通过SSL建立连接

ksql服务器。属性(它的sasl\u ssl部分):

security.protocol=SASL_SSL
sasl.mechanism=GSSAPI

ssl.truststore.location=truststore.jks
ssl.truststore.password=password
ssl.truststore.type=JKS

ssl.ca.location=cert

sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab="my.keytab" serviceName="kafka"  principal="myprincipal";
serviceName="kafka"

producer.ssl.endpoint.identification.algorithm=HTTPS
producer.security.protocol=SASL_SSL
producer.ssl.truststore.location=truststore.jks
producer.ssl.truststore.password=password
producer.sasl.mechanism=GSSAPI
producer.sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab="my.keytab" serviceName="kafka"  principal="myprincipal";

consumer.ssl.endpoint.identification.algorithm=HTTPS
consumer.security.protocol=SASL_SSL
consumer.ssl.truststore.location=truststore.jks
consumer.ssl.truststore.password=password
consumer.sasl.mechanism=GSSAPI
consumer.sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true keyTab="my.keytab" serviceName="kafka"  principal="myprincipal";`

<代码>主机=[主机]-

<代码>主机=[主机]-

<代码>主机=[主机]-

 类似资料:
  • 我目前正在做一个小项目,我需要将kafka集群连接到mongodb,以便将发布到kafka主题的消息存储在mongodb数据库中。我目前有一个本地kafka集群,一个sping引导生产者向一个主题发布消息,一个spinger引导消费者在本地使用这些消息。我也在本地安装了mongob指南针……我一直在看教程,我发现我必须使用某种接收器连接器(mongob连接器)来做我想做的事情,但大多数示例都是基于

  • 我有一个openshift应用程序,我刚刚在同一个插件上安装了一个postgresql DB。 我已经安装了postgresqlDB,但现在我想从PC连接到DB,这样我就可以开始创建新表了。 使用端口转发,我找到了postgresqldb的IP地址 127.3.146.2:5432 在我的网络帐户下,我看到了我的数据库:txxx用户:admisxx密码:xxxx 然后使用RazorSQl,我尝试建

  • 我使用的是spring boot starter和。它在实际的GCP中工作得很好,但现在我想用它进行本地Google PubSub模拟器的测试。如何提供自定义url、端口和无凭据? 编辑: 我的应用程序中只有一个bean: 和 Application.Properties: 当我运行这个应用程序时,我得到了: 当然,链接上说的是gcloud sdk,而不是pubsubtemplate

  • 我正在创建一个Azure函数,它将对CosmosDB中的一个文档执行GET请求。我在Visual Studio 2019预览版中初始化了一个新的Azure Functions项目,创建了一个新的HTTP触发器函数,现在正在努力连接我的Azure Cosmos仿真器。模拟器给了我一个主连接字符串,但我不确定它是如何读入的。我想转到函数url,让它返回我放在本地Cosmos模拟器中的数据。任何帮助都将

  • 可以任何一个请让我知道如何提交火花作业从本地和连接到卡桑德拉集群。 目前,我在通过putty登录到Cassandra节点并提交下面的dse-spark-submit job命令后提交了Spark作业。

  • 问题内容: 我一直都在连接“ admin”数据库,这是一个固定的错误。 使用Mongoose 5.0.6 MongoDb 3.6并尝试连接到Atlas。 我的问题是,Mongoose 5.0.6依赖哪个驱动程序? 我怎么知道猫鼬什么时候可以修复? 在另一个方向上,有没有一种方法可以与MongoDB连接,然后将其与Mongoose结合使用? 干杯 问题答案: 基本上,您应该尝试使用url链接进行连接