Akka 持久化在 Kubernetes 中无法通过发现找到 Cassandra

问题描述

我有一个 Akka 集群与 Cassandra 一起部署在单个命名空间中。经过几天的文档,尝试和失败后,我想出了这样的(可能有点过头了)application.conf

akka {
  actor {
    provider = cluster
    serializers {
      jackson-cbor = "akka.serialization.jackson.JacksonCborSerializer"
    }
    serialization-bindings {
      "com.paycasso.pda.loadtest.CborSerializable" = jackson-cbor
    }
  }
  remote {
    artery {
      enabled = on
      transport = tcp
      canonical.hostname = "127.0.0.1"
      canonical.hostname = ${?AKKA_HOSTNAME}
      canonical.port = 2552
      canonical.port = ${?AKKA_PORT}
      advanced {
        outbound-message-queue-size = 3072 # default value - increase if messages start dropping
      }
    }
  }
  extensions = ["akka.management.cluster.bootstrap.ClusterBootstrap"]

  discovery {
    method = kubernetes-api
    kubernetes-api {
      pod-label-selector = "app.kubernetes.io/name=%s"
    }
    config {
      class = akka.discovery.config.ConfigServicediscovery
      services-path = "akka.discovery.config.services"
      services = {
       cassandra {
          endpoints = [
            {
              host = "loadtest-cassandra"
              host = ${?CASSANDRA_SERVICE}
              port = 9042
              port = ${?CASSANDRA_PORT}
            }
          ]
        }
      }
    }
  }

  cluster {
    downing-provider-class = "akka.cluster.sbr.SplitBrainResolverProvider"
  }

  persistence {
    journal {
      plugin = "akka.persistence.cassandra.journal"
      auto-start-journals = ["akka.persistence.cassandra.journal"]
    }

    snapshot-store.plugin = "akka.persistence.cassandra.snapshot"

    cassandra {
      service-discovery {
        name = ""
        name = ${?CASSANDRA_SERVICE}
        lookup-timeout = 5 s
      }

      # don't do this in production,convenient for local example
      journal {
        keyspace-autocreate = true
        tables-autocreate = true
      }
      snapshot {
        keyspace-autocreate = true
        tables-autocreate = true
      }
      query {
        refresh-interval = 2s
      }

      events-by-tag {
        // for lower latency
        eventual-consistency-delay = 25ms
        flush-interval = 25ms
        pubsub-notification = on
      }
    }
  }

  # Akka Management config: https://developer.lightbend.com/docs/akka-management/current/index.html
  management {
    http {
      hostname = "127.0.0.1"
      hostname = ${?AKKA_MANAGEMENT_HTTP_HOST_IP}
      port = 8558
      port = ${?AKKA_MANAGEMENT_HTTP_PORT}
      route-providers-read-only = true
    }
    health-checks {
      readiness-checks {
        cluster-membership = "akka.management.cluster.scaladsl.ClusterMembershipCheck"
      }
    }
    cluster.bootstrap {
      contact-point-discovery {
        discovery-method = kubernetes-api
        required-contact-point-nr = 1
        required-contact-point-nr = ${?required_CONTACT_POINT_NR}
      }
    }
  }
}

alpakka.cassandra {
  service-discovery.name = "cassandra"
}

datastax-java-driver {
  advanced.reconnect-on-init = true
  basic.contact-points = ["loadtest-cassandra:9042"]
  basic.load-balancing-policy.local-datacenter = "datacenter1"
}

application {
  http {
    interface = "0.0.0.0"
    interface = ${?HTTP_HOST_IP}
    port = 8080
    port = ${?HTTP_PORT}
  }
  serviceName = "loadtest"
  serviceName = ${?SERVICE_NAME}
}

但我无法让集群联系 Cassandra,因为所有发现方法(我也尝试过 akka-dns)都没有提供发现或配置端口的方法

这是上述配置的相关日志部分:

[loadtest] [2021-05-04 17:31:37,906] [INFO] [akka.discovery.kubernetes.KubernetesApiServicediscovery] [] [loadtest-akka.actor.default-dispatcher-20] - Querying for pods with label selector: [app.kubernetes.io/name=loadtest-cassandra]. Namespace: [loadtest]. Port: [None]
[loadtest] [2021-05-04 17:31:37,928] [WARN] [akka.persistence.cassandra.query.scaladsl.CassandraReadJournal] [] [loadtest-akka.actor.default-dispatcher-11] - EventsByTag eventual consistency set below 1 second. This is likely to result in missed events. See reference.conf for details.
[loadtest] [2021-05-04 17:31:37,945] [WARN] [com.datastax.oss.driver.internal.core.ContactPoints] [] [loadtest-akka.persistence.cassandra.default-dispatcher-25] - Ignoring invalid contact point  (expecting host:port)

我的配置有什么问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...