问题描述
我有一个 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 (将#修改为@)