The retention policy of the schema topic is incorrect 라는 에러가 갑자기 발생했다.
이유는 정확치 않았지만. kafka replication이 제대로 동작안되면 문제가 발생할 수 있다.
The retention policy of the schema topic " + topic + " is incorrect. " + "You must configure the topic to 'compact' cleanup policy to avoid Kafka " + "deleting your schemas after a week. " + "Refer to Kafka documentation for more details on cleanup policies"
debezium은 before/after 데이터 변경에 대해 row의 변화에 대한 정보를 json으로 출력한다.
gtid가 두가지 정보가 온다. : 이후에 sequence number가 오는데 debezium이 주는걸까? mysql일까? “gtid”:{“string”:“9a227629-491c-11e9-ae9d-fa163ea8d9a7:128519”} “gtid”:{“string”:“9a227629-491c-11e9-ae9d-fa163ea8d9a7:128520"}
(내생각) 이 정보를 배경으로 (아마도 kafka) at once를 구현하는 것처럼 보인다..
그리고 jpa와 같은 delete 쿼리에 transaction이 같이 날아다는 데. 이 때문에 null이 출력한다.(사실은 debezium이 처리하고 싶지 않은 데이터는 모두 null로 출력된다, debezium은 insert, update, delete 정보를 출력한다.
debezimum 소스를 보면, delete event일 때 두 메시지를 보낸다. 한다. null이 바로 tombstone message이다.
debezium 설정에 “tombstones.on.delete”: “false”, 로 설정하니 delete 이벤트가 날아갈 때 null이 더 이상 나오지 않는다. {“id”:49615} {“before…“op”:“d”,“ts_ms”:{“long”:1554456897149}}
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)
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정도는 하도록 설정해야 테스트하는데.. 이슈가 생기지 않는다.
카프카 커넥트를 distributed 모드로 실행하면 분산 태스크는 카프카 토픽 정보에 커넥터와 태스크 설정, 커넥터 오프셋, 커넥터 상태 정보를 저장한다.
카프카 커넥트(distributed 모드)를 실행하려 할때, 세 개의 내부 토픽을 확인한다. 만약 토픽이 없으면 주어진 설정을 기반으로 생성한다. 토픽에 주어진 replication, partition 등이 설정으로 있으면 설정한다. 만약 아래 설정이 주어지지 않으면 카프카의 auto 생성 설정 규칙에 따라 생성된다.