Kafka PubSub Connector: Jetty ALPN/NPN настроен неправильно

Я использую kafka_2.11-0.10.2.1 и коннектор pubsub, предоставленный Google здесь. Все, что мне нужно сделать, это передать данные из темы Kafka в тему PubSub с помощью автономного коннектора. Я выполнил все шаги, как и должен был:

  1. Спродюсировал cps-kafka-connector.jar
  2. Добавлен файл cps-sink-connector.properties в каталог config kafka. Файл выглядит так:
name=CPSConnector
connector.class=com.google.pubsub.kafka.sink.CloudPubSubSinkConnector
tasks.max=10
topics=kafka_topic
cps.topic=pubsub_topic
cps.project=my_gcp_project_12345
  1. Я убедился, что включаю преобразователи string в connect-standalone.properties, так как я намерен отправлять только строковые сообщения:
key.converter=org.apache.kafka.connect.storage.StringConverter 
value.converter=org.apache.kafka.connect.storage.StringConverter
  1. Я создал тему kafka_topic и отправил несколько сообщений следующего содержания:
$ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic kafka_topic
$ hello streams
$ kafka streams rock
  1. Я запустил коннектор следующим образом:
$ bin/connect-standalone.sh config/connect-standalone.properties config/cps-sink-connector.properties

и намерение состоит в том, чтобы бежать:

$ gcloud beta pubsub subscriptions pull subscription_to_pubsub_topic

для сбора этих сообщений. Однако возникают ошибки, приведенные ниже, и я не могу их понять.

Кажется, они связаны с jetty-9.2.15.v20160210. Уведомление:

  [2017-05-04 22:42:26,635] ERROR Commit of WorkerSinkTask{id=CPSConnector-0} offsets threw an unexpected exception:(org.apache.kafka.connect.runtime.WorkerSinkTask:204)
  java.lang.RuntimeException: java.util.concurrent.ExecutionException:       io.grpc.StatusRuntimeException: UNKNOWN

а также

  Caused by: java.util.concurrent.ExecutionException: io.grpc.StatusRuntimeException: UNKNOWN ...
  Caused by: io.grpc.StatusRuntimeException: UNKNOWN ...
  Caused by: java.lang.IllegalArgumentException: Jetty ALPN/NPN has not been properly configured ...

Есть предположения? Как настроить причал? Я прочитал сообщение здесь в котором говорится, что:

Сегодня ни один стандартный выпуск Java не имеет встроенной поддержки ALPN (есть проблема с отслеживанием, так что проголосуйте за нее!), поэтому нам нужно использовать расширение bootclasspath Jetty-ALPN (или Jetty-NPN, если на Java ‹ 8) для OpenJDK. Для этого добавьте параметр JVM Xbootclasspath, указывающий путь к jar-файлу Jetty alpn-boot.

java -Xbootclasspath/p:/path/to/jetty/alpn/extension.jar ...

Обратите внимание, что вы должны использовать выпуск jar Jetty-ALPN, специфичный для используемой вами версии Java. Однако вы можете использовать агент JVM Jeety-ALPN-Agent, чтобы загрузить правильный jar-файл Jetty alpn-boot для текущей версии Java. Для этого вместо добавления параметра Xbootclasspath добавьте параметр JVM javaagent, ссылающийся на путь к jar-файлу Jetty alpn-agent.

java -javaagent:/path/to/jetty-alpn-agent.jar ...

... но я действительно не понимаю, как это учитывать в моей конфигурации. Есть предположения? Ниже показана часть журнала ошибок:

    ...
    name = CPSConnector
    tasks.max = 10
    transforms = null
    value.converter = null
   (org.apache.kafka.connect.runtime.ConnectorConfig:180)
  [2017-05-04 22:42:17,447] INFO TaskConfig values:
    task.class = class com.google.pubsub.kafka.sink.CloudPubSubSinkTask
   (org.apache.kafka.connect.runtime.TaskConfig:180)
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@6fda6170] Created with target pubsub.googleapis.com:443
  [2017-05-04 22:42:17,447] INFO Instantiated task CPSConnector-7 with version 0.10.2.1 of type com.google.pubsub.kafka.sink.CloudPubSubSinkTask (org.apache.kafka.connect.runtime.Worker:317)
  [2017-05-04 22:42:17,451] INFO ConsumerConfig values:
    auto.commit.interval.ms = 5000
    auto.offset.reset = earliest
    bootstrap.servers = [localhost:9092]
    check.crcs = true
    client.id =
    connections.max.idle.ms = 540000
    enable.auto.commit = false
    exclude.internal.topics = true
    fetch.max.bytes = 52428800
    fetch.max.wait.ms = 500
    fetch.min.bytes = 1
    group.id = connect-CPSConnector
    heartbeat.interval.ms = 3000
    interceptor.classes = null
    key.deserializer = class org.apache.kafka.common.serialization.ByteArrayDeserializer
    max.partition.fetch.bytes = 1048576
    max.poll.interval.ms = 300000
    max.poll.records = 500
    metadata.max.age.ms = 300000
    metric.reporters = []
    metrics.num.samples = 2
    metrics.recording.level = INFO
    metrics.sample.window.ms = 30000
    partition.assignment.strategy = [class org.apache.kafka.clients.consumer.RangeAssignor]
    receive.buffer.bytes = 65536
    reconnect.backoff.ms = 50
    request.timeout.ms = 305000
    retry.backoff.ms = 100
    sasl.jaas.config = null
    sasl.kerberos.kinit.cmd = /usr/bin/kinit
    sasl.kerberos.min.time.before.relogin = 60000
    sasl.kerberos.service.name = null
    sasl.kerberos.ticket.renew.jitter = 0.05
    sasl.kerberos.ticket.renew.window.factor = 0.8
    sasl.mechanism = GSSAPI
    security.protocol = PLAINTEXT
    send.buffer.bytes = 131072
    session.timeout.ms = 10000
    ssl.cipher.suites = null
    ssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1]
    ssl.endpoint.identification.algorithm = null
    ssl.key.password = null
    ssl.keymanager.algorithm = SunX509
    ssl.keystore.location = null
    ssl.keystore.password = null
    ssl.keystore.type = JKS
    ssl.protocol = TLS
    ssl.provider = null
    ssl.secure.random.implementation = null
    ssl.trustmanager.algorithm = PKIX
    ssl.truststore.location = null
    ssl.truststore.password = null
    ssl.truststore.type = JKS
    value.deserializer = class org.apache.kafka.common.serialization.ByteArrayDeserializer
   (org.apache.kafka.clients.consumer.ConsumerConfig:180)
  [2017-05-04 22:42:17,461] INFO Kafka version : 0.10.2.1 (org.apache.kafka.common.utils.AppInfoParser:83)
  [2017-05-04 22:42:17,461] INFO Kafka commitId : e89bffd6b2eff799 (org.apache.kafka.common.utils.AppInfoParser:84)
  [2017-05-04 22:42:17,462] INFO Creating task CPSConnector-8 (org.apache.kafka.connect.runtime.Worker:305)
  [2017-05-04 22:42:17,463] INFO ConnectorConfig values:
    connector.class = com.google.pubsub.kafka.sink.CloudPubSubSinkConnector
    key.converter = null
    name = CPSConnector
    tasks.max = 10
    transforms = null
    value.converter = null
   (org.apache.kafka.connect.runtime.ConnectorConfig:180)
  [2017-05-04 22:42:17,463] INFO TaskConfig values:
    task.class = class com.google.pubsub.kafka.sink.CloudPubSubSinkTask
   (org.apache.kafka.connect.runtime.TaskConfig:180)
  [2017-05-04 22:42:17,463] INFO Instantiated task CPSConnector-8 with version 0.10.2.1 of type com.google.pubsub.kafka.sink.CloudPubSubSinkTask (org.apache.kafka.connect.runtime.Worker:317)
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@74e87b55] Created with target pubsub.googleapis.com:443
  [2017-05-04 22:42:17,465] INFO ConsumerConfig values:
    auto.commit.interval.ms = 5000
    auto.offset.reset = earliest
    bootstrap.servers = [localhost:9092]
    check.crcs = true
    client.id =
    connections.max.idle.ms = 540000
    enable.auto.commit = false
    exclude.internal.topics = true
    fetch.max.bytes = 52428800
    fetch.max.wait.ms = 500
    fetch.min.bytes = 1
    group.id = connect-CPSConnector
    heartbeat.interval.ms = 3000
    interceptor.classes = null
    key.deserializer = class org.apache.kafka.common.serialization.ByteArrayDeserializer
    max.partition.fetch.bytes = 1048576
    max.poll.interval.ms = 300000
    max.poll.records = 500
    metadata.max.age.ms = 300000
    metric.reporters = []
    metrics.num.samples = 2
    metrics.recording.level = INFO
    metrics.sample.window.ms = 30000
    partition.assignment.strategy = [class org.apache.kafka.clients.consumer.RangeAssignor]
    receive.buffer.bytes = 65536
    reconnect.backoff.ms = 50
    request.timeout.ms = 305000
    retry.backoff.ms = 100
    sasl.jaas.config = null
    sasl.kerberos.kinit.cmd = /usr/bin/kinit
    sasl.kerberos.min.time.before.relogin = 60000
    sasl.kerberos.service.name = null
    sasl.kerberos.ticket.renew.jitter = 0.05
    sasl.kerberos.ticket.renew.window.factor = 0.8
    sasl.mechanism = GSSAPI
    security.protocol = PLAINTEXT
    send.buffer.bytes = 131072
    session.timeout.ms = 10000
    ssl.cipher.suites = null
    ssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1]
    ssl.endpoint.identification.algorithm = null
    ssl.key.password = null
    ssl.keymanager.algorithm = SunX509
    ssl.keystore.location = null
    ssl.keystore.password = null
    ssl.keystore.type = JKS
    ssl.protocol = TLS
    ssl.provider = null
    ssl.secure.random.implementation = null
    ssl.trustmanager.algorithm = PKIX
    ssl.truststore.location = null
    ssl.truststore.password = null
    ssl.truststore.type = JKS
    value.deserializer = class org.apache.kafka.common.serialization.ByteArrayDeserializer
   (org.apache.kafka.clients.consumer.ConsumerConfig:180)
  [2017-05-04 22:42:17,469] INFO Kafka version : 0.10.2.1 (org.apache.kafka.common.utils.AppInfoParser:83)
  [2017-05-04 22:42:17,472] INFO Kafka commitId : e89bffd6b2eff799 (org.apache.kafka.common.utils.AppInfoParser:84)
  [2017-05-04 22:42:17,478] INFO Creating task CPSConnector-9 (org.apache.kafka.connect.runtime.Worker:305)
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@15768b04] Created with target pubsub.googleapis.com:443
  [2017-05-04 22:42:17,484] INFO ConnectorConfig values:
    connector.class = com.google.pubsub.kafka.sink.CloudPubSubSinkConnector
    key.converter = null
    name = CPSConnector
    tasks.max = 10
    transforms = null
    value.converter = null
   (org.apache.kafka.connect.runtime.ConnectorConfig:180)
  [2017-05-04 22:42:17,486] INFO TaskConfig values:
    task.class = class com.google.pubsub.kafka.sink.CloudPubSubSinkTask
   (org.apache.kafka.connect.runtime.TaskConfig:180)
  [2017-05-04 22:42:17,486] INFO Instantiated task CPSConnector-9 with version 0.10.2.1 of type com.google.pubsub.kafka.sink.CloudPubSubSinkTask (org.apache.kafka.connect.runtime.Worker:317)
  [2017-05-04 22:42:17,486] INFO ConsumerConfig values:
    auto.commit.interval.ms = 5000
    auto.offset.reset = earliest
    bootstrap.servers = [localhost:9092]
    check.crcs = true
    client.id =
    connections.max.idle.ms = 540000
    enable.auto.commit = false
    exclude.internal.topics = true
    fetch.max.bytes = 52428800
    fetch.max.wait.ms = 500
    fetch.min.bytes = 1
    group.id = connect-CPSConnector
    heartbeat.interval.ms = 3000
    interceptor.classes = null
    key.deserializer = class org.apache.kafka.common.serialization.ByteArrayDeserializer
    max.partition.fetch.bytes = 1048576
    max.poll.interval.ms = 300000
    max.poll.records = 500
    metadata.max.age.ms = 300000
    metric.reporters = []
    metrics.num.samples = 2
    metrics.recording.level = INFO
    metrics.sample.window.ms = 30000
    partition.assignment.strategy = [class org.apache.kafka.clients.consumer.RangeAssignor]
    receive.buffer.bytes = 65536
    reconnect.backoff.ms = 50
    request.timeout.ms = 305000
    retry.backoff.ms = 100
    sasl.jaas.config = null
    sasl.kerberos.kinit.cmd = /usr/bin/kinit
    sasl.kerberos.min.time.before.relogin = 60000
    sasl.kerberos.service.name = null
    sasl.kerberos.ticket.renew.jitter = 0.05
    sasl.kerberos.ticket.renew.window.factor = 0.8
    sasl.mechanism = GSSAPI
    security.protocol = PLAINTEXT
    send.buffer.bytes = 131072
    session.timeout.ms = 10000
    ssl.cipher.suites = null
    ssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1]
    ssl.endpoint.identification.algorithm = null
    ssl.key.password = null
    ssl.keymanager.algorithm = SunX509
    ssl.keystore.location = null
    ssl.keystore.password = null
    ssl.keystore.type = JKS
    ssl.protocol = TLS
    ssl.provider = null
    ssl.secure.random.implementation = null
    ssl.trustmanager.algorithm = PKIX
    ssl.truststore.location = null
    ssl.truststore.password = null
    ssl.truststore.type = JKS
    value.deserializer = class org.apache.kafka.common.serialization.ByteArrayDeserializer
   (org.apache.kafka.clients.consumer.ConsumerConfig:180)
  [2017-05-04 22:42:17,492] INFO Kafka version : 0.10.2.1 (org.apache.kafka.common.utils.AppInfoParser:83)
  [2017-05-04 22:42:17,493] INFO Kafka commitId : e89bffd6b2eff799 (org.apache.kafka.common.utils.AppInfoParser:84)
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@2aa0b78d] Created with target pubsub.googleapis.com:443
  [2017-05-04 22:42:17,496] INFO Created connector CPSConnector (org.apache.kafka.connect.cli.ConnectStandalone:90)
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@1bb167da] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@41380fb7] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@7ecb1a4d] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@4db17054] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@3ca410f4] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@611d92fb] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@7a2f9bb8] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@24675ca9] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@7e101025] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@65220a00] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@79a69904] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@4dcf0b0d] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@6440f37f] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@179dd4b2] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@67a3fdd] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@5a8c6de1] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@7b83e31f] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@3408c640] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@6b9cd402] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@3790445] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@2a583bab] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@68d47f55] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@3b0906db] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@4ef86c1f] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@793abbe9] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@2c734def] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@202098c0] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@3b129183] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@2058dcfd] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@c977767] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@1c4dbc55] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@48952135] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@31b59feb] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@21c700c] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@35a9958a] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@5611534b] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@5b844502] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@3af9d26e] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@3d18fe46] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@6910904f] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@3aa392ae] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@5f8e90f5] Created with target pubsub.googleapis.com:443
  May 04, 2017 10:42:17 PM io.grpc.internal.ManagedChannelImpl <init>
  INFO: [ManagedChannelImpl@5e5c05fe] Created with target pubsub.googleapis.com:443
  ...
  Caused by: io.grpc.StatusRuntimeException: UNKNOWN
    at io.grpc.Status.asRuntimeException(Status.java:545)
    at io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:417)
    at io.grpc.ClientInterceptors$CheckedForwardingClientCall.start(ClientInterceptors.java:203)
    at io.grpc.stub.ClientCalls.startCall(ClientCalls.java:248)
    at io.grpc.stub.ClientCalls.asyncUnaryRequestCall(ClientCalls.java:227)
    at io.grpc.stub.ClientCalls.futureUnaryCall(ClientCalls.java:186)
    at com.google.pubsub.v1.PublisherGrpc$PublisherFutureStub.publish(PublisherGrpc.java:480)
    at com.google.pubsub.kafka.sink.CloudPubSubGRPCPublisher.publish(CloudPubSubGRPCPublisher.java:44)
    at com.google.pubsub.kafka.sink.CloudPubSubRoundRobinPublisher.publish(CloudPubSubRoundRobinPublisher.java:43)
    at com.google.pubsub.kafka.sink.CloudPubSubSinkTask.publishMessagesForPartition(CloudPubSubSinkTask.java:321)
    at com.google.pubsub.kafka.sink.CloudPubSubSinkTask.flush(CloudPubSubSinkTask.java:265)
    ... 22 more
  Caused by: java.lang.IllegalArgumentException: Jetty ALPN/NPN has not been properly configured.
    at io.grpc.netty.GrpcSslContexts.selectApplicationProtocolConfig(GrpcSslContexts.java:153)
    at io.grpc.netty.GrpcSslContexts.configure(GrpcSslContexts.java:130)
    at io.grpc.netty.GrpcSslContexts.configure(GrpcSslContexts.java:119)
    at io.grpc.netty.GrpcSslContexts.forClient(GrpcSslContexts.java:90)
    at io.grpc.netty.NettyChannelBuilder.createProtocolNegotiator(NettyChannelBuilder.java:263)
    at io.grpc.netty.NettyChannelBuilder$NettyTransportFactory.newClientTransport(NettyChannelBuilder.java:322)
    at io.grpc.internal.CallCredentialsApplyingTransportFactory.newClientTransport(CallCredentialsApplyingTransportFactory.java:62)
    at io.grpc.internal.TransportSet.startNewTransport(TransportSet.java:199)
    at io.grpc.internal.TransportSet.obtainActiveTransport(TransportSet.java:179)
    at io.grpc.internal.ManagedChannelImpl$3.getTransport(ManagedChannelImpl.java:476)
    at io.grpc.internal.ManagedChannelImpl$3.getTransport(ManagedChannelImpl.java:432)
    at io.grpc.DummyLoadBalancerFactory$DummyLoadBalancer.pickTransport(DummyLoadBalancerFactory.java:105)
    at io.grpc.internal.ManagedChannelImpl$1.get(ManagedChannelImpl.java:149)
    at io.grpc.internal.ClientCallImpl.start(ClientCallImpl.java:201)
    at io.grpc.auth.ClientAuthInterceptor$1.checkedStart(ClientAuthInterceptor.java:104)
    at io.grpc.ClientInterceptors$CheckedForwardingClientCall.start(ClientInterceptors.java:195)
    ... 30 more

person Christos Hadjinikolis    schedule 04.05.2017    source источник


Ответы (1)


Проблема была связана с pom.xml в файле (здесь: https://github.com/GoogleCloudPlatform/pubsub/blob/master/kafka-connector/pom.xml), который по умолчанию настроен для работы с linux-x86_64. Я заменил linux-x86_64 на ${os.detected.classifier} и все заработало нормально. В частности, я заменил:

<dependency>
 <groupId>io.netty</groupId>
 <artifactId>netty-tcnative-boringssl-static</artifactId>
 <version>1.1.33.Fork14</version>
 <classifier>linux-x86_64</classifier>

with:

<dependency>
 <groupId>io.netty</groupId>
 <artifactId>netty-tcnative-boringssl-static</artifactId>
 <version>1.1.33.Fork14</version>
 <classifier>${os.detected.classifier}/classifier>

in GoogleCloudPlatform/pubsub/kafka-connector/pom.xml.

person Christos Hadjinikolis    schedule 08.05.2017
comment
Обратите внимание, это означает, что jar плагина должен быть собран на том же типе машины, на которой он будет работать. В документации плагина это не проясняется. Я получил ту же ошибку, когда собрал банку на своем ноутбуке с Windows и попытался запустить ее на сервере Linux X86_64. Имеет смысл, что сетевая библиотека будет специфичной для платформы, но было бы неплохо, если бы в документации это упоминалось. - person user944849; 04.06.2018