에러
Spring 서버에서 produce 데이터를 Kafka로 보내고, Kafka Connect Sink를 활용해 DB에서 consume하려고 했습니다.
아래와 같은 데이터를 Serialize를 통해 Kafka로 보내려고 했는데 ...
{
"schema": {
"type": "struct",
"fields": [
{
"type": "int32",
"optional": false,
"field": "id"
},
{
"type": "string",
"optional": true,
"field": "user_id"
},
{
"type": "string",
"optional": true,
"field": "pwd"
},
{
"type": "string",
"optional": true,
"field": "name"
},
{
"type": "int64",
"optional": true,
"name": "org.apache.kafka.connect.data.Timestamp",
"version": 1,
"field": "created_at"
}
],
"optional": false,
"name": "users"
},
"payload": {
"id": 1,
"user_id": "users1",
"pwd": "test1111",
"name": "user name",
"created_at": 1721536482000
}
}
근데 아래와 같이 오타를 냈고 ...
@Data
@AllArgsConstructor
public class Field {
private String type;
private boolean optional;
private String feild; // feild(x) -> field(o)
}
because they are in the failed log directory E:\tmp\kafka-logs. (kafka.server.ReplicaManager)
[2024-07-23 14:08:54,119] INFO [ReplicaFetcherManager on broker 0] Removed fetcher for partitions Set(orders-0) (kafka.server.ReplicaFetcherManager)
[2024-07-23 14:08:54,119] WARN Stopping serving logs in dir E:\tmp\kafka-logs (kafka.log.LogManager)
[2024-07-23 14:08:54,119] INFO [ReplicaAlterLogDirsManager on broker 0] Removed fetcher for partitions Set(orders-0) (kafka.server.ReplicaAlterLogDirsManager)
[2024-07-23 14:08:54,122] ERROR Shutdown broker because all log dirs in E:\tmp\kafka-logs have failed (kafka.log.LogManager)
잘못 만들어진 토픽 내 데이터로 인해 Connect Sink에서 오류가 났고, 카프카 서버 자체가 종료된 이후 에러 로그 때문에 다시 기동시켜도 켜지지 않았습니다.
로그를 삭제
토픽 내에 데이터를 삭제하기 위해 config/server.properties로 로그 경로를 확인하고 삭제했습니다.
orders 토픽이 문제라 orders-0, orders-1 ... 등의 모든 폴더를 삭제했습니다.
하지만 해결이 되지 않아 도커로 카프카를 기동시켜야 하나 고민했습니다.
zookeeper 메타데이터 삭제
주키퍼는 작동이 되었고, 주키퍼 내에 카프카의 메타데이터를 저장해서 카프카 서버가 기동될 때 해당 정보를 가져와서 에러가 발생하는 것 같았습니다. 카프카 서버 자체가 기동되지 않아 bin/kafka-topics.bat을 실행시켜 topic을 삭제할 수 없었습니다.
그나마 작동이 되던 주키퍼와 주키퍼 쉘을 통해 토픽을 삭제하는 방법을 알아봤습니다.
cd kafka_2.12-3.4.0
# 주키퍼 기동
./bin/windows/zookeeper-server-start.bat ./config/zookeeper.properties
# 주키퍼 쉘 진입
./zookeeper-shell.bat localhost:2181
# 토픽 리스트 확인
ls /brokers/topics
# 토픽 삭제
deleteall /brokers/topics/orders
# 토픽 리스트 확인 - 삭제 토픽 확인
ls /brokers/topics
쉘이 이상한건지.. 동일한 명령어도 안되다가 엔터 몇번 치고 입력햇을 땐 됐습니다.
이후 쉘을 빠져나와서 주키퍼와 카프카를 다시 기동하면 문제 있던 토픽이 삭제되어 정상적으로 동작합니다.
후기
카프카 토픽 내의 데이터를 로그로 관리한다는 것과 주키퍼가 카프카 메타데이터를 관리한다는 것을 배울 수 있었습니다.