카프카에 XML 데이터 흡수 - 소개
이를 감안하여 카프카 커뮤니티에서는 XML 형식의 원본 시스템의 데이터를 카프카 테마로 변환하는 방법을 자주 묻는다.일반적으로 외부 시스템에서 카프카를 촬영하는 경로는 Kafka Connect 이지 평면 파일, REST 단점, 메시지 대기열, 다른 곳에서 촬영하는 것이 아니다.
🤔 카프카 콘셉트에서 뭘 볼 수 있을까요?
우리 기초부터 시작합시다.카프카의 정보는 바이트일 뿐이니 우리가 원하는 물건을 넣을 수 있다.우리는 XML을 카프카 테마에 저장할 수 있습니다. 현재 카프카 테마에 XML이 포함되어 있습니다.그러나 우리는 이 데이터를 어떻게 처리하기를 원합니까?Google 소비 프로그램이 정말로 XML 흐름을 원하지 않는다면, XML 데이터와 모델을 카프카 소비자들이 실제 모델을 읽고 접근할 수 있는 형식으로 바꾸는 방법을 찾아야 합니다.
카프카드에 일반 텍스트로 저장된 XML 메시지:
출처
카프카 메시지
<?xml version='1.0' encoding='UTF-8'?>
<dataset> <record> <name>Edinburgh NCP</name> <space>E63</space> <occupied>false</occupied> </record> <record> <name>Bournemouth NCP</name> <space>E88</space> <occupied>true</occupied> </record> </dataset>
<?xml version='1.0' encoding='UTF-8'?> <dataset> <record> <name>Edinburgh NCP</name> <space>E63</space> <occupied>false</occupied> </record> <record> <name>Bournemouth NCP</name> <space>E88</space> <occupied>true</occupied> </record> </dataset>
이것은 보기에 이런 유효 하중과 큰 차이가 없다출처
카프카 메시지
Bacon ipsum dolor amet strip steak fatback porchetta
Bacon ipsum dolor amet strip steak fatback porchetta
이것은 단지 문자열일 뿐이다. 소비 응용 프로그램이 카프카 테마의 정보를 읽을 때, 응용 프로그램은 이 데이터를 어떻게 해석하는지 알아야 한다. XSD로 XML을 해석하든지, 돼지의 장점을 찾아내든지.🐷.우리가 실제로 하고 싶은 것은 메시지를 카프카에 저장해서 유효 부하 모드로 삼는 것이다.이것은 우리에게 논리적으로 다음과 같은 정보를 주었다.
출처
카프카 메시지
<dataset>
<record>
<name>Edinburgh NCP</name>
<space>E63</space>
<occupied>false</occupied>
</record>
<record>
<name>Bournemouth NCP</name>
<space>E88</space>
<occupied>true</occupied>
</record>
</dataset>
이름:스페이스
점용하다
에든버러 NCP
E63
거짓
본머스 NCP
E88
맞다
만약 네가 자세히 관찰한다면, 우리는 유효 하중 처리에 대해 약간의 가설을 진행하고 있다.우리는 XML 메시지를 가져왔고
<dataset> <record>
가 두 개의 기록을 포함하는 패키지라고 가정했다.아마도 우리는 모든 것을 단일한 정보로 삼고 싶을 것이다. 이것이 바로 우리가 재분류 양식의 본질을 깊이 연구하는 것이다. 왜냐하면 많은 가설과 수동적인 절차가 검증되어야 하기 때문이다.스키마
누가 패턴에 신경을 씁니까?내가?너!카프카를 둘러싸고 파이프와 프로그램을 구축하고자 하는 사람은 원본 코드에 의존하지 않고 원본 코드와 분리해야 한다.이전 섹션의 예시를 고려하여 우리는
name
/space
/occupied
필드를 사용하여 최종적으로 보여주고 이를 JDBC 수신기에 연결하여 데이터베이스에 직접 흐르게 하며 DDL을 실행하는 데 필요한 패턴이 있기 때문에 목표표를 만들 수 있다.XML은 XSD를 모델로 문서화하지만, 카프카 생태계에서는 보편적으로 지원되는 serde가 아니다.이를 위해서는 Avro, Protobuf 또는 JSON 모드를 알아야 합니다.Confluent Schema Registry는 세 가지 기능을 지원하며 모든 생산자와 소비자 애플리케이션에 SERDE를 제공합니다.Kafka Connect와 ksqlDB를 직접 삽입하여 '플러그인' 데이터 파이프를 구축할 수 있습니다.
왜 JSON만 있는 게 아니죠?
내 말은 JSON이 생기면 우리는 이런 소식을 볼 수 있다는 것이다.
{
"name": "Edinburgh NCP",
"space": "E63",
"occupied": "false"
}
패턴이 있는 것 같지 않아요?우리는 이 JSON 데이터를 카프카 메시지에 저장할 수 있는데, 이것이 부족합니까?응, 정말이 아니야. 왜냐하면 우리는 단지 추측할 수 있을 뿐이니까.우리는 세 열이 있다고 가정할 수 있다. 그것들은null이 될 수 없다. 그것들은VARCHAR
처럼 보일 수 있다. 비록 occupied
브리 값이 될 수 있지만, 우리는 모른다.만약 우리가 데이터를 사용하고자 한다면, 우리는 그것을 사용하고자 할 때 실제 모델을 지정해야 한다. (사실상, 이것은 우리가 데이터를 작성한 팀/조직을 결합시켜 그 정의와 언제 바뀌었는지 찾아내야 한다는 것을 의미한다.)
CREATE STREAM carpark_json (name VARCHAR,
space VARCHAR,
occupied VARCHAR)
WITH (KAFKA_TOPIC='carpark_json',
VALUE_FORMAT='JSON');
그에 비해 카프카 테마의 데이터를 서열화하여 실제 모델을 등록할 수 있는 형식으로 만든다.현재 데이터 사용과 관련이 있을 때, 우리는 이 모든 것들 (필드, 데이터 유형, defualts,nullability 등) 을 알고 있으며, 또한 모든 소비자에게도 적용된다.이 예를 살펴보면 소비자는 ksqlDB입니다.-- Note that we don't have to type in the schema
-- This is because the consuming application (ksqlDB here)
-- can retrieve the full schema from the Schema Registry
CREATE STREAM carpark_proto
WITH (KAFKA_TOPIC='carpark_proto',
VALUE_FORMAT='PROTOBUF');
-- Here's the schema:
ksql> DESCRIBE carpark_proto;
Name : CARPARK_PROTO
Field | Type
----------------------------
NAME | VARCHAR(STRING)
SPACE | VARCHAR(STRING)
OCCUPIED | VARCHAR(STRING)
----------------------------
모델의 중요성에 대한 자세한 내용은 다음과 같습니다.그렇다면 XML을 카프카 테마로 만들 수 있는 선택은 무엇일까요?
이것은 어느 정도에 XML 데이터의 출처에 달려 있다.만약 그것이 평면 파일에서 왔다면, 당신은 아래의 모든 옵션을 가지고 있습니다.만약 그것이 메시지 대기열과 같다면, 목록의 두 번째 옵션을 볼 수 있을 것이다.
👾 해봐!
Docker Compose onGitHub에서 이 코드를 실행할 수 있습니다.
Reference
이 문제에 관하여(카프카에 XML 데이터 흡수 - 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rmoff/ingesting-xml-data-into-kafka-introduction-2iha텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)