인프런 커뮤니티 질문&답변

strato721224님의 프로필 이미지
strato721224

작성한 질문수

카프카 완벽 가이드 - 커넥트(Connect) 편

AVRO 연결이 안됩니다 ㅠㅠ

해결된 질문

작성

·

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 에서 다운로드 받아서 다시 설치 부탁드립니다.

마지막으로 가급적이면 강의 실습 환경과 동일하게 구축하여 일단 강의를 완강하신 후 환경을 변경해 보시는게 좋을 것 같습니다.

안되면 다시 글 부탁드립니다. 감사합니다.

strato721224님의 프로필 이미지
strato721224
질문자

안녕하세요. 선생님

https://www.confluent.io/hub/confluentinc/kafka-connect-avro-converter 에 있는거로 처음 시도 했다가 안되서 디비지움 사이트에서 다른 컨버터도 존재 한다고 하여 그것도 테스트를 했었습니다.

 

말씀 주신데로 confluent hub 를 이용 하여 설치를 했습니다.

 


  1. 아래 보시면 "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

 


  1. 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

 


  1. 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"

}

]

 


  1. 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를 설치 해서 그런걸까요? 아니면 설치를 제대로 못해서 그런걸까요?

 

권 철민님의 프로필 이미지
권 철민
지식공유자

Connect가 Cluster개념으로 묶여져 있으면 기본적으로 모든 kafka 노드에 Avro Converter가 설치되어 있어야 합니다. 일단 이것부터 해보시고, 안되시면 다시 글 부탁드립니다.

strato721224님의 프로필 이미지
strato721224

작성한 질문수

질문하기