kafka streams : 토픽의 데이터를 stateful, stateless로 실시간 변환하여 다른 토픽에 적재하는 라이브러리 - java 기반 streams 애플리케이션은 kafka 클러스터와 완벽하게 호환되며 (kafka에서 공식 제공하기 때문) 스트림 처리에 필요한 기능 (신규 토픽 생성, 상태 저장, 데이터 조인 등) 을 제공- kafka 클러스터 운영 시, 실시간 스트림 처리를 해야 하는 경우, streams 애플리케이션으로 개발하는 것이 1순위 streams 애플리케이션은 내부적으로 스레드를 1개 이상 생성하며, 스레드는 1개 이상의 태스크를 가짐 태스크(task) : streams 애플리케이션 실행 시 생기는 데이터 처리 최소 단위- streams는 병렬 처리를 위해 파티션과 strea..
쉘 스크립트를 이용해 kafka 클러스터 정보를 확인할 수도 있지만, 매번 확인하는 것은 번거로운 작업이며, 클러스터 옵션 자동화를 위해서는 별도 코드 작성이 필요하다. kafka 클라이언트 라이브러리에서는 클러스터 내부 옵션 설정, 조회 등을 위한 admin api를 제공한다. AdminClient 사용 예시 - 컨슈머를 멀티 스레드 구성하려고 할 때, 토픽의 파티션 개수를 확인 후, 멀티 스레드로 구성- AdminClient 클래스로 구현된 대시보드를 통해 ACL이 적용된 클러스터 리소스 접근 권한 규칙을 추가 - 특정 토픽의 데이터 양이 늘어났을 때 AdminClient로 토픽의 파티션 개수를 늘림 AdminClient는 kafka 클러스터 정보만 입력하면 된다. AdminClient의 주요 메..
기본 설정 gradle에서 아래와 같이 dependencies 지정함으로써 kafka client 라이브러리 사용 가능 /* * This file was generated by the Gradle 'init' task. * * This generated file contains a sample Java application project to get you started. * For more details on building Java & JVM projects, please refer to https://docs.gradle.org/8.12/userguide/building_java_projects.html in the Gradle documentation. */plugins { // Apply ..
브로커- 카프카 클라이언트와 데이터를 주고받기 위한 주체 - 데이터를 분산 저장하여 fault tolerance 유지해주는 애플리케이션- 실 운영 환경에서는 3대 이상의 브로커를 1개의 클러스터로 묶어 운영해야 함 데이터 저장, 전송 - 프로듀서가 브로커로 데이터를 전송 - 브로커는 프로듀서가 요청한 토픽의 파티션에 데이터를 저장- 컨슈머가 데이터를 요청하면 브로커는 파티션에 저장된 데이터를 전송 일반적인 메시지 큐잉 서비스는 큐에 저장된 데이터 전송하면 해당 메시지는 삭제되지만, kafka는 파일 시스템을 이용하기 때문에 설정한 유지 기간 (retention.ms 등) 동안 파일 시스템에 메시지가 저장됨. 하지만 페이지 캐시를 사용해 디스크 입출력 속도를 높혀 파일 시스템을 통한 I/O에 대한 속도 ..
kafka-console-producer.sh로 생성된 토픽에 데이터를 넣을 수 있다. 레코드 : 토픽에 넣는 데이터, key, value로 구성되며, key 설정하지 않을 시 null로 key를 설정한다. 1. 키 없이 토픽에 레코드 기록./bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic hello.kafka>hello>kafka>123>>^Cctrl C로 종료하기 전까지 "hello", "kafka", "123", " " 4개의 레코드를 기록했다. 레코드에 기록되는 값은 UTF-8 인코딩 기준으로 byte 변환 후, ByteArraySerializer로 직렬화된다. 따라서 string 이외의 타입 (정의된 객체 등)..