Study with book

    리더 에포크와 복구

    리더 에포크는 카프카의 파티션들이 복구 동작을 할 때 메시지의 일관성을 유지하기 위한 용도기본적으로 브로커가 재시작되면 자신의 하이워터마크보다 높은 메시지들은 신뢰할 수 없는 메시지로 판단하고 삭제 상황1)팔로워가 재시작되어서 자신보다 높은 하이워터마크 레코드를 삭제하기 전에 리더에게 리어 에포크 요청을 진행리더는 리더 에포크 응답으로 1번 오프셋 message2까지라고 응답을 보내고팔로워는 1번 오프셋가지 하이워터마크를 샹향 조정여기서 리더가 장애가 발생해서 팔로워가 리더로 승격되더라도 데이터는 유실되지 않음 상황2)프로듀서로부터 message3을 받아서 1번 오프셋에 저장팔로워가 없으므로 하이워터마크를 샹향 조정 기존의 리더가 장애에서 복구되었고, 리더가 있으니 팔로워가 됨(리더에 포크 요청 X) 정..

    리플리케이션

    브로커의 장애에도 불구하고 연속으로 안정적인 서비스를 제공하고 데이터 유실을 방지하기 위해서 리플리케이션을 지원 kafak-topics.sh --bootstrap-server peter-kafka01.foo.bar:9092 --create --topic peter-test01 --partitions 1 --replication-factor 3카프카는 컨트롤러 브로커를 통해서 클러스터의 상태를 관리하고 있음 - 컨트롤러 브로커는 클러스터에 있는 모든 브로커의 메타데이터를 유지하고 관리하는 역할kafka-topics.sh --create 명령을 실행하면, 지정된 브로커(peter-kafka01.foo.bar:9092)로 요청요청을 받은 브로커는 컨트롤러 브로커에게 토픽 생성 요청을 전달컨트롤러 브로커는 현재..

    카프카 기본 용어 정리

    카프카 공부를 시작하기 전 용어에 대한 개념부터 정리해봅니다.레코드(=메세지)관계형 데이터베이스에서 로우와 비슷한 개념카프카 데이터의 기본 단위단순한 바이트의 배열토픽관계형 데이터베이스에서 테이블과 비슷한 개념파일시스템의 폴더와 비슷한 개념파티션하나의 토픽이 한 번에 처리할 수 있는 한계를 높이기 위해서 토픽 하나를 여러 개로 나눠 병렬처리가 가능하도록 만든 것파티션에 메시지가 쓰여질 때는 추가만 가능(append-only)오프셋파티션에 메시지가 저장되는 위치리플리케이션파티션을 여러 개로 복제해서 카프카 클러스터 내 브로커들에게 분산시키는 동작을 의미브로커 개수 인 경우에는 토픽을 생성할 때 InvalidReplicationFactorException 에러가 발생프로듀서PUB/SUB 시스템에서 발행자를 ..

    scala trait vs kotlin interface

    캡슐화(encapsulation) 관점에서 보면 Scala의 trait와 Kotlin의 interface는 내부 구현(특히 상태와 헬퍼 로직)을 얼마나 감출 수 있느냐에 큰 차이가 있습니다. 상태(state) 은닉과 접근 제어scala traitval/var 필드를 직접 선언하고, private 또는 private[this] 로 접근을 제한할 수 있습니다.메서드도 private[packagename], protected 등 세밀한 가시성을 줄 수 있어서, 외부에는 오직 “공개하고 싶은 시그니처”만 보이도록 설계할 수 있습니다.trait Counter { private var count: Int = 0 // 외부에서 보이지 않는 상태 def inc(): Unit = count += 1 ..

    1. 도메인 모델 시작

    1.1 도메인이란? 내가 만들고 있느 서비스 혹은 소프트웨어가 영향력을 미치는 곳이며 즉 소프트웨어가 어떠한 문제를 해결하고자 하는 영역을 말합니다. 도메인은 다시 하위 도메인으로 나눌 수 있습니다. 하지만 도메인마다 모두 고정된 하위 도메인이 존재하는 것은 아닙니다. 쇼핑몰을 운영하고 있다면, E-Commerce가 나의 도메인 영역이 되는 것입니다. 그리고 쇼핑몰은 회원, 카테고리, 주문, 상품 등의 하위 도메인이 존재합니다. 모든 온라인 쇼핑몰이 고객 혜택을 제공하지 않으며 규모가 작은 업체는 엑셀과 같은 도구를 이용해서 수작업으로 정산을 처리할 수도 있습니다. 1.2 도메인 전문가와 개발자 간 지식 공유 코딩에 앞서 요구사항을 올바르게 이해하는 것이 중요합니다. 요구사항을 제대로 이해하지 않으면 변..

    [프로그래머스] 124나라의 숫자

    [124나라의 숫자] https://programmers.co.kr/learn/courses/30/lessons/12899 풀고 느낀점 내 머리로 풀 수 없는 문제였습니다. 한 2시간 고민하다가 구글링해서 풀이법을 봤습니다. Level 2 문제였는데 풀지 못하니 살짝 현타가 왔습니다. 3진법을 응용한 문제였습니다. 10진법의 값을 몫이 0일때까지 나누다가 나머지가 0인 경우 4로 대체하고 몫을 1만큼 빼주면 됩니다. 좀 더 내공을 쌓아야할 것 같습니다. /** * 124나라의 숫자 * https://programmers.co.kr/learn/courses/30/lessons/12899 */ public class P_12899 { public static void main(String[] args) { ..

    [프로그래머스] 행렬의 곱셈

    [행렬의 곱셈] https://programmers.co.kr/learn/courses/30/lessons/12949 풀고 느낀점 오랜만에 코테를 풀어서 그런지 생각보다 오래걸렸습니다. 한참 코테 문제를 풀 때 잘 안풀리면 무조건 디버그를 돌려서 차근 차근 보자라는 원칙이 있었는데 망각하고 머리속으로 계속 상상하면서 푸니까 더 오래 걸린 것 같습니다. 나중엔 결국 디버그 돌려서 풀었습니다. 갑자기 드는 생각인데 개발 툴 도움 없이는 절대 문제를 풀지 못할 것 같다는 생각이 들었습니다. 진짜 잘푸는 사람보면 툴 도움 없이 그냥 크롬에서 풀던데 그 경지는 절대 못갈 것 같습니다. 다시 일주일에 3코테 목표를 세웠습니다. 이직을 하고 나서 꽤 소홀했는데 다시 정신차려야할 것 같습니다. /** * 2차원 행렬 ..

    [프로그래머스] 더 맵게

    [더 맵게] programmers.co.kr/learn/courses/30/lessons/42626 풀고 느낀점 더 맵게는 쉽게 풀었습니다. 다른 Level2 정도의 문제보다 쉬워서 당황했습니다. 아니면... 제가 그만큼 실력이 향상된 것일까요? 그랬으면 좋을 것 같습니다. 풀이 방식은 우선순위 큐(힙)에다가 scoville 배열의 값을 하나씩 넣어줍니다. 그럼 heap은 우선순위에 맞게 정렬이 됩니다. heap에서 하나씩 데이터를 꺼내보면서 K보다 값이 작은지만 체크합니다. 작다면 섞은 음식의 스코빌 지수를 계산하는 공식을 적용해서 다시 heap에 넣어줍니다. K이상일 때 까지 반복합니다. package algorithms.online.programmers.heap; import java.util.Pr..

    [프로그래머스] 메뉴 리뉴얼

    [메뉴 리뉴얼] programmers.co.kr/learn/courses/30/lessons/72411 풀고 느낀점 이전부터 조합문제를 많이 풀고 있어서 그런지 생각보다 많이 어렵진 않았습니다. orders 배열로 들어온 문자열 배열에 대해서 나올 수 있는 조합을 구합니다. 예를 들어 1번 손님의 경우 [] [A] [B] [C] [F] [G] [A, B] [A, C] ...... 이렇게 나올 것입니다. 2번, 3번 손님도 마찬가지 입니다. 그리고 course 배열을 순회 돌면서 아까 구한 조합에서 course 개수랑 같은 개수를 가진 조합을 빼냅니다. course 의 값이 2이면, 1번 손님의 경우는 [A, B] [A, C] [A, F] .... 가 됩니다. 그리고 2번 손님, 3번 손님으로도 마찬가지로..

    [프로그래머스] 베스트앨범

    [베스트앨범] programmers.co.kr/learn/courses/30/lessons/42579 풀고 느낀점 프로그래머스 문제 설명이 상당히 불친절 한 것 같습니다. 다른 문제를 가져다가 번역을 한 것 같은데, 몇몇 설명이 누락된 부분도 있는 것 같습니다. 이번 문제를 읽고 예시를 봐도 return값이 왜 저렇게 나오는지 이해가 안되었습니다. 그래서 이번에도 문제 설명에 대한 힌트만 봤는데 각 장르마다 최대 2개씩 뽑는 부분이 설명에 빠져있었습니다. 계속 프로그래머스에서 코테연습을 진행해야할지 의문입니다. 그래도 카**에서 프로그래머스 플랫폼을 사용하니까 어쩔 수 없이 해당 사이트에서 연습을 진행해야할 것 같습니다. 문제 난이도는 중(?)정도였습니다. 그냥 자료구조 잘써서 잘 정렬해서 상위 2개 뽑..