8.4.4. Kafka Connect API 노출
Kafka Connect REST API를 KafkaConnector 리소스를 사용하여 커넥터를 관리하는 대신 사용합니다. Kafka Connect REST API는 < connect_cluster_name> -connect-api:8083 에서 실행되는 서비스로 사용할 수 있습니다. 여기서 < connect_cluster_name >은 Kafka Connect 클러스터의 이름입니다. 이 서비스는 Kafka Connect 인스턴스를 생성할 때 생성됩니다.
Kafka Connect REST API에서 지원하는 작업은 Apache Kafka Connect API 설명서에 설명되어 있습니다.
strimzi.io/use-connector-resources 주석은 KafkaConnectors를 활성화합니다. KafkaConnect 리소스 구성에 주석을 적용한 경우 Kafka Connect API를 사용하도록 제거해야 합니다. 그러지 않으면 Kafka Connect REST API를 사용하여 직접 변경한 수동 변경 사항은 Cluster Operator에서 되돌립니다.
커넥터 구성을 JSON 오브젝트로 추가할 수 있습니다.
커넥터 구성을 추가하기 위한 curl 요청 예
curl -X POST \
http://my-connect-cluster-connect-api:8083/connectors \
-H 'Content-Type: application/json' \
-d '{ "name": "my-source-connector",
"config":
{
"connector.class":"org.apache.kafka.connect.file.FileStreamSourceConnector",
"file": "/opt/kafka/LICENSE",
"topic":"my-topic",
"tasksMax": "4",
"type": "source"
}
}'
API는 OpenShift 클러스터 내에서만 액세스할 수 있습니다. OpenShift 클러스터 외부에서 실행되는 애플리케이션에 Kafka Connect API를 액세스하려면 다음 기능 중 하나를 생성하여 수동으로 노출할 수 있습니다.
-
LoadBalancer또는NodePort유형 서비스 -
Ingress리소스(Kubernetes만 해당) - OpenShift 경로(OpenShift만 해당)
연결이 안전하지 않으므로 외부 액세스를 권장합니다.
서비스를 생성하려면 < connect_cluster_name> -connect-api 서비스의 선택기 에서 레이블을 사용하여 서비스가 트래픽을 라우팅할 Pod를 구성합니다.
서비스의 선택기 구성
# ...
selector:
strimzi.io/cluster: my-connect-cluster
strimzi.io/kind: KafkaConnect
strimzi.io/name: my-connect-cluster-connect
#...
외부 클라이언트의 HTTP 요청을 허용하는 NetworkPolicy 도 생성해야 합니다.
Kafka Connect API에 대한 요청을 허용하는 NetworkPolicy의 예
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: my-custom-connect-network-policy
spec:
ingress:
- from:
- podSelector:
matchLabels:
app: my-connector-manager
ports:
- port: 8083
protocol: TCP
podSelector:
matchLabels:
strimzi.io/cluster: my-connect-cluster
strimzi.io/kind: KafkaConnect
strimzi.io/name: my-connect-cluster-connect
policyTypes:
- Ingress
- 1
- API에 연결할 수 있는 Pod의 레이블입니다.
클러스터 외부에 커넥터 구성을 추가하려면 curl 명령에 API를 노출하는 리소스의 URL을 사용합니다.