해결된 질문
작성
·
1.2K
1
안녕하세요. 선생님 수업을 잘 듣고 있습니다.
일단 선생님이 알려주신 부분하고 다르게 하고 있는게 있어서 환경 부터 어떻게 했는지 말씀 드릴게요.
일단 kafka는 Confluent kafka 가 아닌 apache kafka 로 설치 했습니다.
EC2 에서 총 8개의 인스턴스를 구축 했으며
Apache Zookeeper 3.8.1 3개
Apache Kafka 2.13-3.3.2 3개
=> Source connect : Debezium mysql connect 2.1.2
=> Sink connect : Confluent JDBC Connector 10.6.3
Confluent Schema registry 7.3.0 1개
mysql DB 1 개 (Source 와 Sink 는 user 로 분리해서 데이터 넣는 방식으로 테스트 중입니다)
위와 같이 구성을 해서 구축을 했습니다.
테스트는 json 방식으로 Source 와 sink 쪽에 각각 connect 정보 등록 해서 데이터 전달 되는것까지 통과 했습니다.
Confluent Schema registry 는 설치 하고 카프카서버에서 스키마 서버 8081포트 가 뜨는것도 확인 했습니다.
Json 방식으로 Schema registry 로 데이터 전달 되는것도 문제 없었습니다.
문제점. 수업에 있는 Avro 로 connect 등록 할려고 하니 바로 에러가 납니다.
{"error_code":500,"message":"Error trying to forward REST request: Connector configuration is invalid and contains the following 2 error(s):\nInvalid value io.apicurio.registry.utils.converter.AvroConverter for configuration key.converter: Class io.apicurio.registry.utils.converter.AvroConverter could not be found.\nInvalid value io.apicurio.registry.utils.converter.AvroConverter for configuration value.converter: Class io.apicurio.registry.utils.converter.AvroConverter could not be found.\nYou can also find the above list of errors at the endpoint /connector-plugins/{connectorType}/config/validate
"}
위와 같은 에러에 대해 일단 조치한 점은
kafka 의 connect-distributed.properties 에서 설정한 "plugin.path" 에
Kafka Connect Avro Converter(https://www.confluent.io/hub/confluentinc/kafka-connect-avro-converter)를 압축 풀어서 두었습니다.
connect 서버 재 가동 후, 아래 명령어로 Plugin 확인 하였는데 mysql connect 나 jdbc Source connect , jdbc sink connect 는 뜨는데 "avro" 관련된 plugin 이 보이지 않았습니다.
"curl --location --request GET 'localhost:8083/connector-plugins' | jq '.'"
그래서 위 에러가 Avro 를 못찾는다는 이유가, kafka에 avro 를 설정을 못한건지?
Confluent Schema registry 에 avro 문제 인건지? 아니면 제가 Confluent kafka 가 아닌 apache kafka 로 설치 해서 인지 알수가 있을까요?
답변 1
0
안녕하십니까,
에러 메시지를 보면 io.apicurio.registry.utils.converter.AvroConverter 를 못찾는다고 되어 있는데,
혹시 Confluent Schema Registry가 아니라 Apicurio로 접속하는건 아닌지요? 일단 먼저 확인해 주시고,
다음으로 Confluent Schema Registry에 정상적으로 접속하고 있다면 왜 Connector가 Connect가 제공하는 기본 Avro Converter인 io.confluent.connect.avro.AvroConverter를 사용하지 않고 io.apicurio.registry.utils.converter.AvroConverter를 사용하는지 확인이 필요할 것 같습니다.
오류로 봐서는 Connector에서 key.converter 설정을 io.apicurio.registry.utils.converter.AvroConverter 로 하신것 같은데 확인 부탁드립니다.
제가 Confluent Kafka Connect가 아닌 Apache Kafka Connect를 오래전에 써서 기억이 가물가물한데, 그때도 Avro Converter가 io.apicurio.registry.utils.converter.AvroConverter는 아니었던것 같습니다.
기억이 확실하진 않지만 그때 사용한 Apache Kafka Connect에 기본으로 Avro Converter가 있었고, io.confluent.connect.avro.AvroConverter로 되어 있었던것 같습니다.
Avro Converter가 io.confluent.connect.avro.AvroConverter 인지 다시 한번 확인해 주시고, 만약에 없다면 https://www.confluent.io/hub/confluentinc/kafka-connect-avro-converter 에서 다운로드 받아서 다시 설치 부탁드립니다.
마지막으로 가급적이면 강의 실습 환경과 동일하게 구축하여 일단 강의를 완강하신 후 환경을 변경해 보시는게 좋을 것 같습니다.
안되면 다시 글 부탁드립니다. 감사합니다.
Connect가 Cluster개념으로 묶여져 있으면 기본적으로 모든 kafka 노드에 Avro Converter가 설치되어 있어야 합니다. 일단 이것부터 해보시고, 안되시면 다시 글 부탁드립니다.
안녕하세요. 선생님
https://www.confluent.io/hub/confluentinc/kafka-connect-avro-converter 에 있는거로 처음 시도 했다가 안되서 디비지움 사이트에서 다른 컨버터도 존재 한다고 하여 그것도 테스트를 했었습니다.
말씀 주신데로 confluent hub 를 이용 하여 설치를 했습니다.
아래 보시면 "confluentinc-kafka-connect-avro-converter " , "worker.properties" 추가가 생성 되었습니다.
ubuntu@ip-172-31-0-29:/usr/local/kafka/connector-plugin$ ls
confluentinc-kafka-connect-avro-converter debezium-connector-oracle
confluentinc-kafka-connect-jdbc worker.properties
debezium-connector-mysql
confluentinc-kafka-connect-avro-converter 내부에는 3개의 디렉토리와 json file이 존재 합니다.
ubuntu@ip-172-31-0-29:/usr/local/kafka/connector-plugin/confluentinc-kafka-connect-avro-converter$ ls
assets doc lib manifest.json
Connect를 가동 하고 plug-in 은 확인 해봤는데 Avro 는 보이지 않았습니다.
ubuntu@ip-172-31-0-29:~$ curl --location --request GET 'localhost:8083/connector-plugins' | jq '.'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 682 100 682 0 0 5251 0 --:--:-- --:--:-- --:--:-- 5370
[
{
"class": "io.confluent.connect.jdbc.JdbcSinkConnector",
"type": "sink",
"version": "10.6.3"
},
{
"class": "io.confluent.connect.jdbc.JdbcSourceConnector",
"type": "source",
"version": "10.6.3"
},
{
"class": "io.debezium.connector.mysql.MySqlConnector",
"type": "source",
"version": "2.1.2.Final"
},
{
"class": "io.debezium.connector.oracle.OracleConnector",
"type": "source",
"version": "2.1.2.Final"
},
{
"class": "org.apache.kafka.connect.mirror.MirrorCheckpointConnector",
"type": "source",
"version": "3.3.2"
},
{
"class": "org.apache.kafka.connect.mirror.MirrorHeartbeatConnector",
"type": "source",
"version": "3.3.2"
},
{
"class": "org.apache.kafka.connect.mirror.MirrorSourceConnector",
"type": "source",
"version": "3.3.2"
}
]
Plug-in 에서 보이지 않지만 connect 가 되는지 확인 해봤는데 아래와 같은 메시지가 떳습니다.
ubuntu@ip-172-31-0-29:~$ curl --location --request POST 'http://localhost:8083/connectors' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "mysql-source-connector",
"config": {
"connector.class": "io.debezium.connector.mysql.MySqlConnector",
"tasks.max": "1",
"database.hostname": "lg-mysql",
"database.port": "3306",
"database.user": "source",
"database.password": "source1234",
"database.server.id": "10001",
"database.include.list": "hesdp_mgr",
"database.allowPublicKeyRetrieval": "true",
"schema.history.internal.kafka.bootstrap.servers": "lg-kafka01:9092,lg-kafka02:9092,lg-kafka03:9092",
"schema.history.internal.kafka.topic": "schemahistory.source",
"include.schema.changes": "true" ,
"topic.prefix": "source_mysqldb" ,
"time.precision.mode": "connect" ,
"key.converter": "io.confluent.connect.avro.AvroConverter",
"value.converter": "io.confluent.connect.avro.AvroConverter",
"key.converter.schema.registry.url": "http://lg-schema01:8081",
"value.converter.schema.registry.url": "http://lg-schema01:8081",
"transforms": "unwrap",
"transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState",
"transforms.unwrap.drop.tombstones": "false"
}
}'
{"error_code":500,"message":"Error trying to forward REST request: Connector configuration is invalid and contains the following 2 error(s):\nInvalid value io.confluent.connect.avro.AvroConverter for configuration key.converter: Class io.confluent.connect.avro.AvroConverter could not be found.\nInvalid value io.confluent.connect.avro.AvroConverter for configuration value.converter: Class io.confluent.connect.avro.AvroConverter could not be found.\nYou can also find the above list of errors at the endpoint
/connector-plugins/{connectorType}/config/validate
"}ubuntu@ip-172-31-0-29:~$제가 설치는 잘 했는데 카프카 3개 구성 한건데 1군데만 Avro를 설치 해서 그런걸까요? 아니면 설치를 제대로 못해서 그런걸까요?