Infra/Kafka, MQTT 11

[Kafka] Kafka Producer 압축 방법을 어떤 걸 써야할까? (gzip, snappy, lz4, zstd 성능 비교 테스트)

Kafka를 사용할 경우, Producer에서 데이터를 전송할 때 압축률(compression.type)을 지정할 수가 있는데, 자주 쓰는 4가지 압축 방법을 비교하여 포스팅을 해보려고 한다. (매번 헷갈린다..) 자주 쓰는 압축 방법은 gzip, snappy, lz4, zstd 4가지 정도가 있는데, 이 4가지를 테스트해보았다. 파티션이 1개인 Kafka Topic에 건당 10KB 데이터를 전송하여, 압축률 /속도 /CPU 사용량을 비교해보았다.  ※ 테스트 카프카 구성 스펙- 버전 : 3.8.1- 브로커 : 3개- 파티션: 1개 - 카프카 프로듀서 : 자바 API (postman으로 호출)- 사용한 모니터링 도구 : Kafka UI   1. gzip1) 100건 전송 (1MB)Kafka UI에서 좌측..

Infra/Kafka, MQTT 2024.11.07

[MQTT] MQTTX 사용해서 일정한 주기로 웹소켓 메시지 전송하기

MQTT 웹소켓을 사용하는 도중, 프론트엔드 개발자에게서 통신모듈 디버깅이 필요하다고 하며 일정한 주기로 메시지를 보내달라는 요청이 들어왔다. (예를 들어, 2초에 한번씩) 어떻게 할까 알아보던 중에, MQTTX라는 프로그램이 있는 것을 알게되었다. MQTTX는 MQTT 프로토콜을 사용하는 클라이언트 애플리케이션으로, MQTT (Message Queuing Telemetry Transport) 메시지 프로토콜을 통해 메시지를 발행하고 구독하는 기능을 제공한다.  MQTT를 다운받고, 커넥션 설정해주고, 쏴주면 끝이다.  1. MQTTX 다운받기https://mqttx.app/ MQTTX: Your All-in-one MQTT Client ToolboxMQTTX: A powerful, all-in-one ..

Infra/Kafka, MQTT 2024.08.26

[MQTT] Kafka → 웹 소켓 메시지 전송 테스트(Vue3으로 화면 만들어 테스트)

카프카에서 웹소켓으로 메시지를 전송하여 실시간 처리를 해야한다. 지금 나는 백엔드 개발자인데, 프론트에 내가 만든 mqtt 정보 (url, 인증정보, 포트 등) 을 제공해주어야 한다.  백엔드 단에서는 테스트가 모두 완료되었지만, 제공하기 전에, 내가 직접 vue 프론트 프로젝트를 만들어서 내가 보낸 카프카 메시지를 잘 받아오는지 확인하고 싶었다.  백엔드 간단한 코드와 vue 코드를 직접 작성하고, 테스트 하는 과정을 정리했다.    사용한 기술 및 버전 스프링 부트 : 2.5.4자바 : 1.8카프카  : 3.7.0MQTT : 1.2.5 (vue 에서는 5.9.1)vue  : 3.2.13 백엔드 코드1. 차량 ID 별로 MQTT 토픽 생성하여 전송먼저 카프카 컨슈머에서 데이터를 param으로 받고,ob..

Infra/Kafka, MQTT 2024.08.09

[MQTT,Kafka] EMQX 웹 소켓 사용하여 대시보드에 실시간 데이터 보여주기 (Throughput 테스트)

차량의 실시간 위치 데이터 (위도, 경도) 를 MQTT를 사용한 웹소켓으로 대시보드에 실시간으로 변하는 데이터를 보여주었다. 카프카 컨슈머에서 받은 데이터를 바로 MQTT로 메시지 전송하였다. MQTT 프로토콜을 지원하는 메시지 브로커인 EMQX 오픈 소스 브로커를 사용하였다. 실시간으로 데이터를 보여주는 것이 목적이었고, 그 다음으로는 초당 몇건을 보여줄 수 있는지를 테스트 했다.   스프링 부트 버전 : 2.5.4자바 버전 : 1.8카프카 버전 : 3.7.0MQTT 버전 : 1.2.5 pom.xml 의존성을 아래와 같이 받아준다.  org.eclipse.paho org.eclipse.paho.client.mqttv3 1.2.5 org.springframework.integrati..

Infra/Kafka, MQTT 2024.07.11

[Kafka] broker scale out/ scale in (카프카 브로커 스케일 아웃/스케일 인)

카프카 브로커를 스케일 아웃 하는 것은 처리량을 늘리기 위한 방법은 아니다. (처리량을 늘리려면 가장 먼저 파티션을 늘려야 한다)카프카는 리더 브로커만 실질적으로 프로듀서와 통신하고 나머지 팔로워 브로커는 복제만 담당하기 때문이다.  하지만 혹시 모를 이슈 상황을 대비해 카프카 브로커를 스케일 아웃 해보았다.현재 카프카 브로커는 3개이며 5개로 스케일 아웃을 하고,  다시 3개로 스케일 인을 해보았다.  카프카 버전 : 3.7.0총 소요시간 : 8시간 (인증세팅이 없으면 1시간도 안걸리는 작업이지만, 카프카 브로커 sasl 인증을 추가해 줄 때 Credential을 자꾸 추가해 주는 실수를 해서... 오래 걸렸다. 한번 주키퍼에 저장된 Credentail은 다시 지정해줄 필요가 없다. 인증 프로세스 숙지..

Infra/Kafka, MQTT 2024.07.01

[Kafka] 카프카 컨슈머에서 받은 데이터 MariaDB로 전송하기

카프카 스트림즈로 필터링된 토픽을 컨슈밍하는 컨슈머를 만들고, 그 컨슈머에서 받은 데이터를 DB로 insert하도록 하는 기능을 구현했다.  카프카 커넥트로 하려고 했으나, 번거로워서 직접 컨슈머 코드 안에서 dao를 사용하여 db에 접근하여 insert 하도록 했다.  전체 코드이다.  프로듀서import org.apache.kafka.clients.producer.*;import java.util.Properties;public class KafkaProducerTest { /** * SASL 인증을 위한 JAAS Template */ private static final String JAAS_TEMPLATE = "org.apache.kafka.common.security.s..

Infra/Kafka, MQTT 2024.06.18

[Kafka] 카프카 브로커 하나씩 다운시킨 후 메시지 전송 테스트 (고가용성 테스트, replication test)

kafka1, kafka2, kafka3 중에 하나씩 브로커를 죽여보고 메시지를 전송해보려고 한다. 업무에 kafka 를 적용하여 운영할 예정이라, 브로커 서버가 죽었을 때 메시지가 정상적으로 전송 되는지 고 가용성 테스트를 해보기로 했다.  목차1. directTest 토픽의 partition 3들의 복제 상태 확인2. 프로듀서 메시지 전송 확인3. 브로커 하나씩 죽여보기4. 브로커 하나씩 다시 살리기 결론 ✅ 1. directTest 토픽의 partition 3들의 복제 상태 확인현재 토픽의 복제 상태를 확인하는 명령어kafka-topics.sh --bootstrap-server kafka1:9092 --topic directTest --describe --command-config /opt/bitn..

Infra/Kafka, MQTT 2024.06.10

[Kafka] 스프링 부트에 Kafka Streams 적용하기

카프카 스트림즈(Kafka Streams)란?  카프카 스트림즈란 연속적인 이벤트 스트림이 들어올때마다 그때그때 처리하고 분석하여 의미있는 정보를 추출하고 실시간으로 작업을 처리하는 자바 라이브러리 기능이다.  이전에는 카프카 컨슈머 및 프로듀서 조합으로 필터링하여 다시 토픽에 넘겨주는 작업을 해주었지만 카프카 스트림즈는 매우 간단한 스트림즈 DSL 이란 기능으로 강력한 필터링 기능을 제공한다.  아래 그림으로 비교를 해보자.   기존의 필터링 방식  카프카 스트림즈를 이용한 필터링 방식또한 내장 DB 인 Rocks DB를 이용하여 key-value Store 기능도 제공한다.   2. 카프카 스트림즈 예제 코드  간단한 스프링부트 코드로 스트림즈 예제를 실습해보았다.  1. 스트림즈 DSL 라이브러리 ..

Infra/Kafka, MQTT 2024.06.07

[Kafka] 이미 생성된 토픽의 replication factor 변경하기

목차 원래는 토픽 생성 시에 설정 값으로 준다replication-factor를 설정하는 것은 토픽.sh에서 토픽을 생성할 때 설정 값으로 주는 것이다. 아래처럼….$ kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 2 --partitions 10 --topic MyTopic RF를 변경해보자그런데 나는 replication factor를 3으로 변경하고 싶었다. 브로커가 3이기 때문에!일단 토픽을 describe 명령어를 써서 상세 조회 해보자. 1. RF 상세 조회로 현재 RF 값 확인kafka-topics.sh --bootstrap-server kafka1:9092 --topic directTest --d..

Infra/Kafka, MQTT 2024.05.27

[Grafana] Springboot 서버가 꺼지면 Slack 으로 알림받기

카프카 개발 및 운영을 시작하면서 그라파나와 연동을 하게 되었다. 그라파나의 강력한 기능인 알림기능을 사용하고 싶어서 먼저 스프링부트 서버가 꺼지면 슬랙으로 알림을 받는 과정을 먼저 연습하며 정리해보았다.  목차1. 슬랙 웹훅 URL 생성2. 그라파나 연동   1. Contact points 추가  2. Alert rules 설정  3. Notification policies 설정3. 테스트 1. 슬랙 웹훅 URL 생성 슬랙에 먼저 가입하고 워크스페이스를 생성해준다. (이 과정은 설명 생략) 우클릭 → 채널 세부정보 보기 통합 → 앱 → 앱추가 webhook 검색하여 Incoming WebHooks 설치 Slack에 추가 클릭 아까 만들었던 워크스페이스 명을 선택하고 수신 웹후크 통합 앱 추가 웹후크 U..

Infra/Kafka, MQTT 2024.05.16

로컬 VM에 Docker 및 Kafka 설치 (docker-compose.yml작성)

로컬 VM에 Docker를 설치하고, 그 안에 카프카를 설치해서 콘솔 테스트까지 해보는 과정을 정리했다.  목차1. Docker 설치  1) yum 패키지 설치 2) 도커 설치 3) 도커 실행 4) docker-compose 설치 2. Docker Hub에서 카프카 및 카프카UI 이미지 내려받기 1) 카프카 이미지 내려받기 2) 주키퍼 이미지 내려받기 3) 카프카 UI 이미지 내려받기 3. docker-compose.yml 설정 1) docker-compose.yml 작성 2) VM에서 포트포워딩 해주기 4. Kafka Cluster 실행 1) docker-compose 실행 2) docker-compose 실행 확인 5. Kafka Console Test 1) Container 내부 쉘 접속 2) To..

Infra/Kafka, MQTT 2024.04.22