분류 전체보기(115)
-
Kafka 환경에서의 Zookeeper의 Cluster Coordination
Cluster coordination은 Zookeeper가 제공하는 기능 중의 하나로서 분산 환경을 구성하는데 핵심이 되는 기능이다. coordination은 다양한 노드가 상호작용을 통해 작업을 진행할 경우 각 노드들의 상태를 관리하고, 클러스터 전체에 걸쳐 동기화시킴으로서 작업들이 적절하게 진행될 수 있도록 만들어준다. Kafka에서는 대표적으로 다음의 작업 시에 Zookeeper의 Coordination을 활용하게 된다. Topic 생성 Broker 추가 Broker의 실패 그 중에서도 해당 글에서는 Topic의 생성에 초점을 두고 Zookeeper의 Coordination이 이뤄지는 맥락에 대해서 이야기해보고자 한다. Topic Creation 새로운 Kafka Topic이 생성되는 경우 다음의 ..
2023.05.18 -
Kafka와 Zookeeper의 상호작용
Apache Kafka는 실시간 데이터를 fault-tolerant한 방식으로 다룰 수 있게 도와주는 분산 스트리밍 데이터 플랫폼이다. 분산 아키텍처로서 Kafka 클러스터는 단일 머신으로 구성되기보다 여러 머신을 붙여서 사용하는 것이 일반적이다. 이때, 분산 환경을 관리하는 플랫폼인 Apache Zookeeper가 등장한다. Zookeeper와 Kafka는 다음과 같은 상호작용을 수행한다. 1. Broker Registration: Kafka 브로커가 시작되는 경우 Zookeeper에 본인을 등록한다. 해당 정보는 Zookeeper 내부의 ephemeral node 내부에 등록되며, 등록이 완료되었다면 Zookeeper를 통해 해당 브로커가 Kafka 클러스터 내부에 존재하게 된다. 2. Broker ..
2023.05.18 -
Zookeeper의 znode
Apache Zookeeper 내부에서 데이터는 hierarchical namespace로 관리되며, 이는 마치 OS의 파일 시스템 혹은 트리 데이터 구조처럼 표현된다. 이때, z node란 Zookeeper에서 데이터가 저장되는 단위로서, 데이터가 저장되는 트리의 노드라고 생각할 수 있겠다. znode는 두 가지 형태로 분류된다. 1. Persistent znode: 명시적으로 제거되기 전에는 계속해서 zookeeper의 데이터 트리에 남아있는 데이터 노드이다. 클라이언트(ex. kafka)가 연결을 종료하거나 예상치 못하게 세션이 만료되어도 남아있게 된다. 주요 사용 시나리오로는 클러스터의 구성 정보를 저장하거나, 시스템의 상태를 저장하는 등의 client와의 세션 연결에 종속되지 않는 데이터를 저장..
2023.05.18 -
[Leetcode] 1572. Matrix Diagonal Sum
🗓️ Daily LeetCoding Challenge May, Day 8 class Solution: def diagonalSum(self, mat: List[List[int]]) -> int: n = len(mat) answer = 0 for i in range(n): answer += mat[i][i] + mat[i][n - i - 1] if n % 2 != 0: answer -= mat[n // 2][n // 2] return answer
2023.05.09 -
[Leetcode] 34. Find First and Last Position of Element in Sorted Array
🗓️ Daily LeetCoding Challenge May, Day 7 import bisect class Solution: def longestObstacleCourseAtEachPosition(self, obstacles: List[int]) -> List[int]: lis = [] result = [] for obstacle in obstacles: idx = bisect.bisect_right(lis, obstacle) if idx == len(lis): lis.append(obstacle) else: lis[idx] = obstacle print(idx, lis, obstacle) result.append(idx+1) return result
2023.05.09 -
[Leetcode] 1498. Number of Subsequences That Satisfy the Given Sum Condition
🗓️ Daily LeetCoding Challenge May, Day 6 class Solution: def numSubseq(self, nums: List[int], target: int) -> int: answer = 0 nums.sort() # O(NlogN) left, right = 0, len(nums) - 1 while left
2023.05.06