debezium에서 사용하는 schema_changed 관련된 topic 연동하면서 아래와 같이 에러가 나고 debezium이 동작되지 않는 버그가 있다. 


WARN [Consumer clientId=kc_debezium_connector_test-dbhistory, groupId=kc_debezium_connector_test-dbhistory] 1 partitions have leader brokers without a matching listener, including [schema_changes_test-0] (org.apache.kafka.clients.NetworkClient:1012)

ERROR WorkerSourceTask{id=kc_debezium_connector_test-0} Task threw an uncaught and unrecoverable exception (org.apache.kafka.connect.runtime.WorkerTask:177)
org.apache.kafka.connect.errors.ConnectException: org.apache.kafka.common.errors.TimeoutException: Failed to get offsets by times in 60001ms
       at io.debezium.connector.mysql.MySqlConnectorTask.start(MySqlConnectorTask.java:273)


문제는 debezium에서 사용하는 schema_changed 관련된 topic 연동하면서 이슈가 있다.

그래서, debezium 카프카 커넥터를의 history db(schema_changed_test-> schema_changed_user)를 변경하니 이슈가 해결되었다.  즉, 복구할 수 없는 잘못된 메타 데이터로 인해 발생된 것으로 보인다.



org.apache.kafka.connect.errors.ConnectException: The db history topic is missing. You may attempt to recover it by reconfiguring the connector to SCHEMA_ONLY_RECOVERY

 


그래서 기존 debezium connector 설정을 삭제하고..
snapshot.mode”:“schema_only_recovery”을 추가해서 kafka connector를 추가했더니,, consume이 성공했다.

 

$  sudo ./kafka-avro-console-consumer     --bootstrap-server http://loki-test-kafka001.dakao.io:9092,http://loki-test-kafka002.dakao.io:9092,http://loki-test-kafka003.dakao.io:9092        --property print.key=true     --property schema.registry.url=http://loki-test-sr001.dakao.io:8081,http://loki-test-sr002.dakao.io:8081     --topic user

 

 

https://debezium.io/docs/connectors/mysql/에 따르면..
snapshot 모드의 schema_only_recovery는 데이터베이스 히스토리 토픽의 엉킨(corrupted) 데이터를 복구할 수 있다. 반면, snapshot 모드의 schema_only는 데이터를 읽지 않고 현재 테이블 스키마만 읽는 다.

schema_only_recovery 모드는 주기적으로 데이터베이스 히스토리 토픽을 삭제하는데 사용된다. 사실 schema_only_recovery 모드를 사용하지 않으면 토픽을 삭제하기 않기 때문에 주의해야 한다.
따라서 schema_only_recovery 모드를 사용하려면 먼저 데이터베이스 히스토리 토픽을 삭제하고 적용하라고 적혀 있다.

 

카프카 커넥트 또는 debezium은 메타 정보를 카프카 topic에 저장하기 때문에 제대로 replication이 되지 않으면 문제가 발생할 수 있다. 따라서 테스트를 진행할 때 replication 개수를 3정도는 하도록 설정해야 테스트하는데.. 이슈가 생기지 않는다.

작은 replication 설정 때문에 테스크에 문제가 많이 생길 수 있다. 

 

 

 

Posted by '김용환'
,