전체 글 1383

[Kafka] ksqlDB를 사용하여, SQL 구문으로 쉽고 빠르게 카프카 데이터 조회하기

[Kafka] ksqlDB를 사용하여, SQL 구문으로 쉽고 빠르게 카프카 데이터 조회하기 l Kafka 3.6.2, KsqlDB Kafka(이하 “카프카”) 토픽에 저장되어 있는 데이터를 사용하기 위해서는 컨슈머라는 것이 필요하고, 컨슈머에는 각 비즈니스에 필요한 로직을 포함하여 원하는 데이터를 제공한다. 이렇게 시스템을 구성해 놓으면 빠르고 편리하게 메시징 처리를 할 수 있다. 그런데 실시간으로 카프카의 데이터를 조회(집계, 조인)하거나, 카프카 내부의 토픽 데이터를 조합해서 새로운 토픽 데이터 생성이 필요할 때가 있다. 이 경우 매번 컨슈머를 개발하거나 CLI를 통해 구축하는 것은 매우 번거롭고 익숙하지 않은 사용자에게는 어려운 작업일 수 있다. 이때 ksqlDB를 사용하면, 유사SQL문을 사용하여..

[Kafka] Kafka와 Debezium을 활용하여 SQL Server의 데이터를 실시간으로 PostgreSQL로 복제하기

[Kafka] Kafka와 Debezium을 활용하여 SQL Server의 데이터를 실시간으로 PostgreSQL로 복제하기 l Kafka 3.6.2, Debezium 2.5, SQL Server 2019, PostgreSQL 12 Kafka(이하 “카프카”)와 카프카 커넥터인 Debezium을 활용하여 SQL Server에서 발생하는 실시간 DML을 캡처하여 PostgreSQL로 데이터를 복제하는 방법에 대해서 알아본다. 이번 포스트에서는 실시간 데이터 복제를 위한 구성 정도로만 다루고, 각 단계에서의 상세한 기술 내용은 추후 다른 포스팅에서 다룰 예정이다. [Architecture] 이번에 구축하려는 시스템의 아키텍처는 아래와 같다. 어플리케이션에서 MS SQL Server의 데이터를 변경하면 SQL..

[Kafka] Kafka 컨슈머(Consumer) 이해하기

[Kafka] Kafka 컨슈머(Consumer) 이해하기 l Kafka 카프카는 메시지를 생산, 발송하는 프로듀서(producer)와 메시지를 수신, 소비하는 컨슈머(consumer)가 있으며, 프로듀서와 컨슈머 사이에서 메시지를 중개하는 브로커(broker)로 구성된다. 이번 포스트는 컨슈머에 대해서 알아본다. 프로듀서가 카프카의 토픽으로 메시지를 보내면 그 토픽의 메시지를 가져와 소비하는 역할을 하는 애플리케이션, 서버 등을 지칭해서 컨슈머(Consumer)라고 한다. 컨슈머의 주요 기능은 파티션 리더에게 메시지를 가져오기를 요청하는 것이다. 각 요청은 로그의 오프셋을 명시하고 그 위치로부터 로그 메시지를 수신한다. 그래서 컨슈머는 수신할 메시지의 위치를 조정할 수 있으며, 이미 수신한 메시지를 다..

[Kafka] Kafka 프로듀서(Producer) 이해하기

[Kafka] Kafka 프로듀서(Producer) 이해하기 l Kafka 카프카는 메시지를 생산, 발송하는 프로듀서(producer)와 메시지를 수신, 소비하는 컨슈머(consumer)가 있으며, 프로듀서와 컨슈머 사이에서 메시지를 중개하는 브로커(broker)로 구성된다. 이번 포스트는 프로듀서에 대해서 알아본다. 메시지를 생산(producer)해서 카프카의 토픽으로 메시지를 보내는 역할을 하는 애플리케이션, 서버 등을 모두 프로듀서라고 한다. 프로듀서의 주요 기능은 각각의 메시지를 토픽 파티션에 매핑하고 파티션의 리더에 요청을 보내는 것이다. 이때 키 값을 정해 해당 키를 가진 모든 메시지를 동일한 파티션으로 전송할 수 있으며, 키를 지정하지 않으면 라운드 로빈 방식으로 파티션에 균등하게 배분한다...

[Kafka] Kafka 리더, 팔로워, 복제 및 복구 이해하기

[Kafka] Kafka 리더, 팔로워, 복제 및 복구 이해하기 l Kafka Kafka (이하”카프카”)는 분산 처리 시스템으로 서버에 물리적인 장애가 발생하여도 높은 가용성을 보장하도록 구성할 수 있다. 그리고 가용성을 보장하기 위해 데이터를 여러 노드로 분산해서 운영한다. 메시지를 여러 개로 복사해서 카프카 클러스터의 여러 브로커들에게 분산시키는데 이러한 작업을 “리플리케이션”이라 한다. 이때 실제로 리플리케이션되는 정보는 토픽이 아닌 토픽의 파티션이다. 토픽에 대한 자세한 내용은 아래 글을 참고한다. l Kafka 데이터 모델인 Topic과 Partition 이해하기 : https://sungwookkang.com/entry/Kafka-Kafka-%EB%8D%B0%EC%9D%B4%ED%84%B0-..

[Kafka] Kafka 데이터 모델인 Topic과 Partition 이해하기

[Kafka] Kafka 데이터 모델인 Topic과 Partition 이해하기 l Kafka Kafka(이하 “카프카”)에는 토픽(Topic)과 파티션(Partition)이라는 데이터 모델이 있다. 간단히 정리하면 토픽은 메시지를 받을 수 있도록 논리적으로 묶은 개념이고, 파티션은 토픽을 구성하는 물리적 데이터 저장소이며 수평 확장이 가능한 단위이다. 카프카 클러스터는 토픽에 데이터를 저장한다. 토픽의 이름은 249자 미만으로 영문, 숫자, ‘.’, ‘_’, ‘-‘를 조합하여 만들 수 있다. 토픽은 1개 이상의 파티션으로 구성되어 있다. 파티션은 append-only로 동작하며 새 메시지는 파티션 맨 뒤에 추가된다. 그리고 각 메시지의 저장 위치를 offset이라고 한다. 오프셋은 파티션 내에서 메시지를..

[Kafka] Kafka 클러스터 4노드 구성 - Controller, Broker 혼합해서 구성하기

[Kafka] Kafka 클러스터 4노드 구성 - Controller, Broker 혼합해서 구성하기 l Kafka 3.6.1 with KRaft 지난 포스트에서는 카프카를 단일 노드에 구성한 뒤 간단히 PUB/SUB를 테스트하는 방법에 대해서 알아보았다. l Kafka 설치 (with KRaft) 및 PUB/SUB 테스트 코드 (with Python) 실습 : https://sungwookkang.com/entry/Kafka-Kafka-%EC%84%A4%EC%B9%98-with-KRaft-%EB%B0%8F-PUBSUB-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%BD%94%EB%93%9C-with-Python-%EC%8B%A4%EC%8A%B5 이번 포스트는 4 node의 카프카 서버를 클러..

[Kafka] KRaft 설정 파일 및 기본 속성 정의 알아보기

[Kafka] KRaft 설정 파일 및 기본 속성 정의 알아보기 l Kafka 3.6.1 with KRaft Apache Kafka Raft(KRaft)는 메타데이터 관리를 위해 ZooKeeper에 대한 Apache Kafka의 종속성을 제거하기 위해 KIP-500에 도입된 합의 프로토콜이다. 이는 메타데이터에 대한 책임을 ZooKeeper와 Kafka라는 두 개의 다른 시스템으로 분할하는 대신 Kafka 자체에 통합함으로써 Kafka의 아키텍처를 크게 단순화한다. KRaft 모드는 이전 컨트롤러를 대체하고 Raft 합의 프로토콜의 이벤트 기반 변형을 사용하는 Kafka의 새로운 쿼럼 컨트롤러 서비스를 사용한다. Kafka의 새로운 쿼럼 컨트롤러의 이점은 아래와 같다. 1. KRaft는 적절한 크기의 클..

[Kafka] Kafka 설치 (with KRaft) 및 PUB/SUB 테스트 코드 (with Python) 실습

[Kafka] Kafka 설치 (with KRaft) 및 PUB/SUB 테스트 코드 (with Python) 실습 l Kafka 3.6.1 with KRaft Apache Kafka(이하 “카프카”)는 실시간으로 기록 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산형 데이터 스트리밍 플랫폼이다. 여러 소스에서 데이터 스트림을 처리하고 여러 사용자에게 전달하도록 설계되었다. 간단히 말해 A지점에서 B지점까지 이동하는 것뿐만 아니라 A지점에서 Z지점을 비롯해 필요한 모든 곳에서 대규모 데이터를 동시에 이동할 수 있다. 카프카는 현재 여러 마이크로서비스 개발 환경에서 많이 사용되고 있다. 카프카는 3.5.2 버전까지는 분산 코디네이션으로 주키퍼(Zookeeper)를 사용하였지만, 3.6.0 버전 부터는 ..

[Linux] 리눅스에서 TCP DUMP로 패킷헤더 출력하기

[Linux] 리눅스에서 TCP DUMP로 패킷헤더 출력하기 l Linux 일반적으로 어플리케이션간 통신이 되지 않을 때 어플리케이션의 로그도 확인하겠지만, 가장 먼저 확인하는 부분이 OS 방화벽 > 시스템 방화벽(보안프로그램) > 네트워크 방화벽 순이지 않을까 한다. 이때 사용자가 모든 권한을 가지고 있으면 각 단계별로 방화벽 로그나 기타 로그를 보면서 통신이 되는지 (접근이 되는지)등의 문제를 확인할 수 있지만, 사실상 대부분의 업무는 역할이 정해져 있고, 역할마다 접근 권한이 다르기 때문에 빠르게 모든 구간을 확인할 수 없다. 가끔은 필요한 단계에서 각 방화벽의 포트가 오픈되어 있는데, 통신이 되지 않는 경우(대부분은 오해로 발생)도 있다. 이럴 때 쉽게 패킷이 호출되는지 통신 여부를 확인할 수 있..

Linux 2024.01.02