전체 글
-
[flink-conf.yaml] jobmanager 메모리 설정 알아보기 ( JVM, Heap, Off-Heap, Overhead )Flink 2024. 7. 11. 05:55
- 목차 들어가며.Apache Flink 의 flink-conf.yaml 파일은 Flink 클러스터의 전반적인 동작과 리소스 관리를 설정하는 설정 파일입니다. 이번 글에서는 flink-conf.yaml 에서 JobManager 메모리를 설정하는 방법과 이를 최적화하는 방법에 대해 알아보겠습니다. jobmanager.memory.process.sizejobmanager.memory.process.size 는 JobManager 라는 하나의 프로세스가 사용할 수 있는 메모리의 총량이라고 생각하시면 됩니다. 사실 일반적인 Process 는 가상 메모리 방식을 사용하기 때문에 그 내부적으로 메모리 제한이 특별히 존재하진 않습니다. 그럼 어떠한 방식으로 Process 에 Memory 제한을 둘 수 있을까요 ? ..
-
[Kafka] Pull 방식의 복제와 Producer 속도 관계 알아보기 ( replica.fetch.wait.max.ms )Kafka 2024. 6. 25. 06:28
- 목차 들어가며.카프카는 여러 Broker 들이 서로 서로 데이터 복제를 수행합니다.정확히는 리더 브로커가 소유한 파티션을 여러 팔로워 브로커들이 복제를 하게 됩니다. Replication 과 관련된 첫번째 예시로 아래의 이미지를 살펴보면,1개의 Topic 이 3개의 Partition 으로 구성됩니다.이 Topic 의 Replication Factor 는 2로 설정되어 있습니다.따라서 각 Partiton 은 1개의 Leader Broker 와 1개의 Follower Broker 를 필요로 하게 되며,아래와 같은 구조를 가집니다.Partition 0 의 Leader Broker 는 Broker1 이고, Follower Broker 는 Broker3 입니다.따라서 Broker3 은 Broker1 로부터 R..
-
[Kafka] Topic 의 retention.bytes & retention.ms 알아보기Kafka 2024. 6. 24. 05:28
- 목차 들어가며.카프카는 레코드가 저장되는 토픽과 파티션에 Retention 을 설정할 수 있습니다.Retention 의 적용 기준은 용량과 시간입니다.즉, 일정 바이트 이상으로 데이터가 쌓이거나 설정된 시간을 초과한 오래된 레코드는 삭제됩니다.일반적으로 아래와 같은 방식으로 Topic 의 생성과 Retention 을 설정할 수 있습니다. kafka-topics.sh --create --bootstrap-server localhost:9092 \ --topic my-topic \ --partitions 3 \ --replication-factor 2 \ --config retention.ms=86400000 \ --config retention.bytes=1073741824 ..
-
[Hadoop] Docker Image 만들기Hadoop 2024. 6. 24. 05:28
- 목차 Hadoop Docker Image.개인적인 기록을 목적으로 Hadoop Docker Image 생성 절차를 기록합니다. Dockerfile.cat /tmp/DockerfileFROM ubuntu:22.04ENV DEBIAN_FRONTEND=noninterativeRUN apt update && apt install openjdk-8-jdk wget lsof iproute2 -yENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64RUN wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gzRUN tar -xvzf hadoop-3.3.6.tar.gz && rm hadoop-..
-
[Kafka] num.replica.fetchers 와 ReplicaFetcherThread 알아보기Kafka 2024. 6. 24. 05:28
- 목차 들어가며.카프카는 일반적으로 여러개의 브로커들을 함께 실행하여 클러스터 구조를 구성합니다.이러한 클러스터 구조에서 토픽이 생성되면, 브로커들은 리더 브로커와 팔로워 브로커로 나뉘게 됩니다.이 구조에서 리더와 팔로워의 기준은 토픽의 파티션이 됩니다.만약에 하나의 토픽이 1개의 파티션을 가진다면, N개의 브로커들 중에서 오직 하나만 리더가 되고, 나머지 브로커들은 팔로워가 됩니다.즉, 1개의 파티션에 대해서 오직 하나의 리더 브로커만이 존재하는 구조이죠. 그래서 대부분의 브로커들은 반드시 리더 브로커의 데이터를 복제하는 팔로워가 될 수 밖에 없습니다.현실에서 1개 이상의 토픽들이 존재하고, 토픽은 반드시 3개 이상의 파티션을 가질 겁니다.따라서 모든 브로커는 반드시 Replication 을 수행하게..
-
[MySQL] BufferPool Instance 와 쿼리 성능 관계 알아보기 (innodb_buffer_pool_instances)Database/MySQL 2024. 6. 24. 05:27
- 목차 들어가며.이번 글에서는 MySQL 의 BufferPool Instance 와 쿼리 실행 속도의 관계에 대해서 알아보려고 합니다.MySQL 은 BufferPool 이라는 자체적인 메모리 캐싱 구조를 가집니다.즉, 버퍼풀이 수용할 수 있는 만큼의 용량의 데이터들을 메모리에 유지하려고 합니다.만약에 버퍼풀의 크기가 4gb 로 설정되어 있다만 이만큼의 레코드나 인덱스 등의 여러 데이터들이 메모리에 캐싱될 수 있습니다.그리고 BufferPool 은 MySQL 내부에서 단 한개만 존재하는 것이 아니라 설정을 통해서 여러개의 Instance 를 생성할 수도 있습니다. 만약에 BufferPool Instance 가 2개 이상이 존재한다면, 이들은 Hashing 이나 Modulo 연산 등을 통해서 데이터들이 여..
-
[Kafka] advertised.listeners 와 Socket Acceptor Listener Thread 알아보기Kafka 2024. 6. 22. 07:50
- 목차 들어가며.Kafka Broker 는 advertised.listeners 와 같은 설정값이 존재합니다.advertised.listeners 는 카프카 브로커가 외부 클라이언트에게 자신의 IP 혹은 Domain 그리고 Port 를 노출하여 연결될 수 있는 주소를 제공합니다.그리고 이러한 advertised.listeners 를 통해서 클라이언트는 브로커와 연결될 수 있습니다.예를 들어 아래와 같은 Docker Command 를 통해서 Kafka 를 실행할 때에 실행된 브로커는 kafka:9092 라는 주소를 외부로 노출합니다. docker network create kafka-netdocker run -d --name zookeeper --hostname zookeeper --net kafka-n..
-
[MySQL] File Sort 알아보기 ( sort_buffer_size , filesort )Database/MySQL 2024. 6. 22. 07:50
- 목차 들어가며.MySQL 은 ORDER BY 키워드가 적용된 Select Query 를 수행할 때에 내부적으로 데이터 정렬을 수행합니다.데이터의 사이즈가 적은 Query 의 경우에는 기본적으로 메모리 영역에서 정렬을 수행합니다.하지만 정렬해야하는 데이터의 규모가 메모리에서 수행할 수 없는 큰 규모인 경우에는 Disk 와 File 의 도움을 받습니다.이러한 정렬을 File Sort 라고 부릅니다. Sort Buffer 란 ?MySQL 에서 Client 와 mysqld 가 서로 Connection 을 맺게 되면, MySQL 내부에서 하나의 Thread 가 생성됩니다.이는 Session, Connection, Process, Thread 등 여러가지 표현으로 불리는데, show processlist; 쿼리..
-
[MySQL] Assigned, Completed, Written, Flushed / Redo Log 가 처리되는 과정 알아보기Database/MySQL 2024. 6. 22. 07:49
- 목차 들어가며.이번 들에서는 Redo Log 가 생성되는 과정을 알아보려고 합니다.Redo Log 는 MySQL 내부적으로 메모리/디스크 영역에서 생성 및 저장되는 구조를 취하기 때문에 시각적으로 확인하긴 어렵지만,show engine innodb status; 명령어를 통해서 확인하는 방법을 소개하려고 합니다. Redo Log 란 ?Redo Log 는 MySQL 에서 발생하는 DML 쿼리들을 기록합니다.Insert, Update, Delete 쿼리를 Redo Log 파일 내부에 저장하게 됩니다.Redo Log 의 용도는 Crash Recovery 를 목적으로 합니다.만약 MySQL 이 급작스럽게 종료되었을 때에 Redo Log 에 기록된 변경사항을 토대로 이전 상태를 복구하게 됩니다. Redo Lo..
-
[Kubernetes] kube-proxy 와 iptables 알아보기Kubernetes 2024. 6. 22. 07:49
- 목차 들어가며.이번 글에서는 Kubernetes 에서 kube-proxy 의 역할과 Network Iptables 에 대해서 알아보려고 합니다.kube-proxy 는 Kubernetes 의 DaemonSet 으로 생성됩니다.그래서 모든 Node 는 각각 1개의 kube-proxy 를 내장하고 있습니다.아래의 명령어는 현재 실행 중인 kube-proxy Daemonset 을 확인하는 명령어이구요.저의 경우에는 5개의 Node 들이 실행 중이기 때문에 kube-proxy 의 Pod 갯수는 5개로 출력되고 있습니다. kubectl get daemonset --all-namespaces --field-selector metadata.name=kube-proxyNAMESPACE NAME ..