NIFI는 데이터베이스 데이터의 증분 동기화를 구현합니다.

설명하다

nifi 버전: 1.23.2(도커 이미지)

수요 배경

데이터베이스의 데이터를 다른 데이터베이스와 동기화하여 새 데이터와 수정된 기록 데이터의 증분 동기화가 필요함

시뮬레이션된 데이터

테이블 문 만들기

나중에 별도의 변환이 발생하지 않도록 원본 데이터베이스와 대상 데이터베이스의 구조가 일치해야 합니다.

-- 创建测试表
CREATE TABLE `sys_user` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `name` varchar(50) NOT NULL DEFAULT '' COMMENT '姓名',
  `age`  int NOT NULL DEFAULT 0 COMMENT '年龄',
  `gender` tinyint NOT NULL COMMENT '性别,1:男,0:女',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `modify_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `is_deleted` tinyint NOT NULL DEFAULT '0' COMMENT '是否已删除',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT  CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC COMMENT='用户表';

테스트 데이터

-- 模拟数据
INSERT INTO sys_user (name, age, gender) VALUES ('测试数据1', 20, 1);
INSERT INTO sys_user (name, age, gender) VALUES ('测试数据2', 21, 1);
INSERT INTO sys_user (name, age, gender) VALUES ('测试数据3', 21, 0);
INSERT INTO sys_user (name, age, gender) VALUES ('测试数据4', 18, 0);
INSERT INTO sys_user (name, age, gender) VALUES ('测试数据5', 22, 1);

완전한 테스트 데이터

데이터베이스 연결 풀 구성

캔버스의 빈 공간을 마우스 오른쪽 버튼으로 클릭하고 구성을 선택합니다.

새로운 구성 

새 데이터베이스 연결 풀 구성을 추가하려면 팝업 인터페이스에서 + 기호를 클릭합니다. 이미 구성이 있는 경우 이 단계를 건너뛸 수 있습니다.

 팝업 인터페이스에서 해당 유형의 연결 풀을 필터링합니다. 여기에서 DBCPConnectionPool을 선택한 다음 ADD를 클릭합니다.

새로 추가된 데이터 오른쪽에 있는 작은 기어를 클릭하여 연결 풀을 구성합니다.

연결 풀 관련 속성 구성 

아래의 내용을 주로 구성하며, 그 외의 내용은 상황에 따라 수정이 필요하며, 비밀번호를 입력한 후에는 표시되지 않습니다.

속성 확인

구성이 올바른지 확인하고 오른쪽 상단 모서리에 있는 확인 표시를 클릭한 다음 팝업 인터페이스에서 확인을 클릭하여 확인합니다.

 인증이 통과되면 모든 항목이 녹색으로 표시되고, 특정 항목이 통과되지 않으면 메시지가 표시되며 마지막으로 APPLY를 클릭하세요.

(선택 사항) 구성에 이름을 지정합니다.

후속 사용을 용이하게 하려면 연결 풀에 이름을 지정하십시오. 그렇지 않으면 나중에 구성이 너무 많으면 불분명해집니다.

연결 풀 구성 활성화

구성을 활성화하려면 오른쪽에 있는 번개 로고를 클릭하고, 새 페이지에서 활성화 클릭하면 활성화되며, 마지막 으로 닫기를 클릭하면 닫힙니다.

활성화된 구성

같은 방법으로 대상 데이터베이스의 연결 풀 구성을 추가합니다. 단계는 위와 동일하므로 여기서는 반복하지 않습니다. 최종 구성 후에는 두 개의 연결 풀 구성이 있습니다. 다음과 같이:

데이터베이스 테이블 데이터 가져오기

프로세서 추가: QueryDatabaseTable

도구 모음에서 프로세서를 클릭 하고 캔버스로 끌어서 QueryDatabaseTable 프로세서를 필터링한 다음 추가를 클릭하여 캔버스에 추가합니다.

구성 프로세서: QueryDatabaseTable

프로세서를 두 번 클릭하고 속성 탭으로 전환한 후 다음 내용을 구성합니다.

최대값 열(최대 열): 공식 문서에서는 쉼표로 구분된 열 이름 목록으로 설명합니다. 프로세서는 프로세서가 실행되기 시작한 이후 반환된 각 열의 최대값을 추적합니다. 여러 열을 사용한다는 것은 열 목록의 순서를 의미하며 각 열의 값은 이전 열의 값보다 천천히 증가할 것으로 예상됩니다. 따라서 여러 열을 사용한다는 것은 테이블을 분할하는 데 자주 사용되는 열 계층 구조를 의미합니다. 이 프로세서는 마지막 검색 이후 추가/업데이트된 행만 검색하는 데 사용할 수 있습니다. 일부 JDBC 유형(예: 비트/부울)은 최대값을 유지하는 데 도움이 되지 않으므로 이러한 유형의 열은 이 속성에 나열되어서는 안 되며 처리 중에 오류가 발생합니다. 열이 제공되지 않으면 테이블의 모든 행이 고려되며 이는 성능에 영향을 미칠 수 있습니다. 참고: 증분 가져오기가 제대로 작동하려면 지정된 테이블에 대해 일관된 최대값 열 이름을 사용하는 것이 매우 중요합니다.
지원 표현 언어: true

속성 확인

전체 워크플로의 현재 역할을 나타내는 이름을 프로세서에 지정합니다.

데이터 분할

프로세서 추가: SplitAvro

구성 프로세서: SplitAvro

프로세서를 두 번 클릭하고 속성 탭으로 전환하면 모든 내용이 기본값으로 설정됩니다.

데이터 저장고

프로세서 추가: PutDatabaseRecord

프로세서 구성: PutDatabaseRecord

프로세서를 두 번 클릭하고 속성 탭 으로 전환합니다.

레코드 리더가 추가되었습니다.

AvroReader 구성

오른쪽 화살표를 클릭하고 팝업 인터페이스에서 방금 구성한 리더를 선택한 다음 오른쪽의 작은 기어를 클릭합니다.

 팝업 인터페이스에서 필요에 따라 구성하십시오. 여기서는 기본 구성을 따르십시오.

 리더 활성화

활성화하려면 오른쪽의 번개 아이콘을 클릭하세요.

 활성화 후 상태는 활성화됨이 됩니다.

기타 구성

속성 확인

모든 프로세서 연결

프로세서 연결

두 프로세서 QueryDatabaseTable 및 SplitAvro를 연결하고 For Relationships에서 성공을 확인합니다.

두 프로세서 SplitAvro 및 PutDatabaseRecord를 연결하고 For Relationships에서 분할을 확인합니다.

SplitAvro 프로세서에 대한 경보 처리

SplitAvro 프로세서를 두 번 클릭하고 RELATIONSHIPS 로 전환한 후 아래 두 가지 옵션을 확인한 후 적용을 클릭하세요.

 PutDatabaseRecord 프로세서의 경고 처리

PutDatabaseRecord 프로세서를 두 번 클릭하고 RELATIONSHIPS 로 전환한 후 아래 옵션을 확인한 후 적용을 클릭하세요.

 전체 구성

 모든 프로세서 시작

QueryDatabaseTable 프로세서는 기본적으로 1분에 한 번씩 실행되며, SCHEDULING 탭에서 설정할 수 있으며, 여기서는 기본 시간에 따라 실행됩니다.

 캔버스의 빈 곳을 마우스 오른쪽 버튼으로 클릭하고 시작을 선택하여 모든 프로세서를 시작합니다.

 

대상 데이터베이스 데이터 보기

1분 동안 기다린 후 대상 데이터베이스 데이터를 확인하면 원본 데이터베이스의 데이터 5개가 대상 데이터베이스에 동기화된 것을 확인할 수 있습니다.

 소스 데이터베이스의 데이터 수정

UPDATE sys_user SET is_deleted = 1 WHERE id = 1;
UPDATE sys_user SET is_deleted = 1 WHERE id = 4;
INSERT INTO sys_user (name, age, gender) VALUES ('测试数据6', 22, 1);

대상 데이터베이스 데이터를 다시 봅니다.

프로세서가 실행될 때까지 기다린 후 대상 데이터베이스 데이터를 확인하고 새 데이터가 동기화되었는지 확인합니다.

 마지막 프로세서에는 마침내 8개의 레코드가 유입되는 것을 볼 수 있습니다.

결론

위 내용은 NIFI를 사용하여 데이터베이스 데이터를 점진적으로 동기화하는 전체 과정입니다. 궁금한 사항이 있으면 댓글 영역에 의견을 남겨주세요.

추천

출처blog.csdn.net/LSW_JAVADP/article/details/132691708