сообщество!
Я пытаюсь подключить свое приложение Mulesoft к серверу Kafka, который расположен в Heroku. Anypoint Studio 7 (Mule 4) имеет разъем Kafka, который имеет несколько вариантов подключения (Basi c, Kerberos, Kerberos SSL и SSL):
Согласно документации Heroku, он "поддерживает" SSL, но не упоминает, что это необходимо. Кто-нибудь может подтвердить?
Документацию Heroku, которую я видел [https://devcenter.heroku.com/articles/kafka-on-heroku]
Когда я настраиваю приложение в Heroku, добавьте Kafka AddOn, создайте топи c, я получаю bootstrap сервер (ы) от запуска команды heroku config:get KAFKA_URL
Если я пытаюсь выполнить тест abasi c, я получаю следующую ошибку:
В сообщении об ошибке org.mule.runtime.api.connection.ConnectionException: invalid connection!
org.mule.runtime.api.connection.ConnectionException: invalid connection!
Caused by: org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment.
я пытаюсь построить Po C с двумя потоками ... один, который выдает сообщение Topi c и другой поток, потребляемый из него.
Любая помощь по настройке разъема и среды Heroku будет очень кстати
ОБНОВЛЕНИЕ:
Я обнаружил, что при создании приложения в Heroku и включении дополнения KAFKA вы получаете следующие переменные:
KAFKA_URL : A разделенный запятыми список URL-адресов SSL для брокеров Kafka, составляющих кластер. Пример:
kafka + ssl: //ec2-3-*****-100.compute-1.amazonaws.com: 9096, kafka + ssl: // ec2- 3 - ****** - 127.compute-1.amazon aws .com: 9096
KAFKA_TRUSTED_CERT: SSL-сертификат брокера (в формате PEM) , чтобы проверить, что вы подключаетесь к нужным серверам. Пример: * * * тысяча пятьдесят два тысяча пятьдесят три * * * 1054 ----- BEGIN CERTIFICATE ----- MIIDfzCCAmegAwIBAgIBADANBgkqhkiG9w0BAQsFADAyMTAwLgYDVQQDDCdjYS1l ZjQwOWUzNy00NjhhLTRiMGEtOGVkOC0wZWYxMmRhYjkyZWEwHhcNMTkxMjEyMTUx NzU5WhcNMjkxMjEyMTUxNzU5WjAyMTAwLgYDVQQDDCdjYS1lZjQwOWUzNy00Njhh
KAFKA_CLIENT_CERT: требуемый сертификат клиента (в PEM формат) для проверки подлинности клиентов против брокера. Пример:
* * ----- тысяча шестьдесят два BEGIN CERTIFICATE ----- MIIDQzCCAiugAwIBAgIBADANBgkqhkiG9w0BAQsFADAyMTAwLgYDVQQDDCdjYS1l ZjQwOWUzNy00NjhhLTRiMGEtOGVkOC0wZWYxMmRhYjkyZWEwHhcNMjAwMTE1MTU1 MjU2WhcNMzAwMTE1MTU1MjU2WjAZMRcwFQYDVQQDDA51NnZtYWVzM2cwZnMyZj CC
KAFKA_CLIENT_CERT_KEY: Необходимый сертификат клиента ключ (в формате PEM) для аутентификации клиентов по отношению к брокеру. Кластеры Kafka требуют аутентификации с использованием предоставленного сертификата клиента. Любые запросы, не использующие сертификат клиента, будут отклонены. Пример:
----- НАЧАТЬ RSA PRIVATE KEY ----- MIIEpAIBAAKCAQEAmmu + j9DulVnqwIOt02 ++ 6Ehw9Mg7KaocdIQjODVtVipC5AyK iaHsdNVh9bgJQAJSfstIV / 6O1mCLmjUS / YmyIEEgmBvATFxcldPGBGcpPVSV2R3Q
Я полагаю, что нужно мне «преобразовать» их в KeyStore и TrustStore для конфигурации SSL для Connector. Кто-нибудь может подтвердить? поскольку для того, что я вижу из документов, требуется SSL
Еще одно обновление:
Я скачал сертификаты, которые я описал выше, и с помощью инструмента "Обозреватель ключей" создал хранилище ключей. jks и импортировал в него KAFKA_CLIENT_CERT и KAFKA_CLIENT_CERT_KEY, а затем я создал truststore.jsk и импортировал туда файл KAFKA_TRUSTED_CERT. в обоих случаях я установил основной пароль c ... выглядел хорошо, но я получаю сообщение об ошибке:
org.mule.runtime.api.connection.ConnectionException: invalid connection!
org.mule.runtime.api.connection.ConnectionException: invalid connection!
Caused by: org.apache.kafka.common.errors.SslAuthenticationException: SSL handshake failed
Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1521)
at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:528)
at sun.security.ssl.SSLEngineImpl.writeAppRecord(SSLEngineImpl.java:1197)
at sun.security.ssl.SSLEngineImpl.wrap(SSLEngineImpl.java:1165)
at javax.net.ssl.SSLEngine.wrap(SSLEngine.java:469)
at org.apache.kafka.common.network.SslTransportLayer.handshakeWrap(SslTransportLayer.java:448)
at org.apache.kafka.common.network.SslTransportLayer.doHandshake(SslTransportLayer.java:313)
at org.apache.kafka.common.network.SslTransportLayer.handshake(SslTransportLayer.java:265)
at org.apache.kafka.common.network.KafkaChannel.prepare(KafkaChannel.java:170)
at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:547)
at org.apache.kafka.common.network.Selector.poll(Selector.java:483)
at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:540)
at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.run(KafkaAdminClient.java:1196)
at java.lang.Thread.run(Thread.java:748)
Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1709)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:318)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:310)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1639)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:223)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1037)
at sun.security.ssl.Handshaker$1.run(Handshaker.java:970)
at sun.security.ssl.Handshaker$1.run(Handshaker.java:967)
at java.security.AccessController.doPrivileged(Native Method)
at sun.security.ssl.Handshaker$DelegatedTask.run(Handshaker.java:1459)
at org.apache.kafka.common.network.SslTransportLayer.runDelegatedTasks(SslTransportLayer.java:402)
at org.apache.kafka.common.network.SslTransportLayer.handshakeUnwrap(SslTransportLayer.java:484)
at org.apache.kafka.common.network.SslTransportLayer.doHandshake(SslTransportLayer.java:340)
... 7 more
Caused by: java.security.cert.CertificateException: No name matching ec2-3-220-121-33.compute-1.amazonaws.com found
at sun.security.util.HostnameChecker.matchDNS(HostnameChecker.java:231)
at sun.security.util.HostnameChecker.match(HostnameChecker.java:96)
at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:455)
at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:436)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:252)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:136)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1626)
... 16 more
Может быть связано со строкой, вызванной:
java .security.cert.CertificateException: имя не соответствует ec2-3-220-121-33.compute-1.amazon aws .com найдено