데이터 엔지니어링(48)
-
[🧙Kafka] 카프카 개념 - 신뢰성 있는 데이터 전달
신뢰성 있는 데이터 전달 카프카는 웹 클릭 로그 수집, 신용카드 트랜잭션 등 다양한 방면에서 사용된다. 카프카는 신뢰성과 속도 등 사이에서 구성으로 유연하게 조절할 수 있다. 신뢰성 보장 1. 카프카는 메시지 순서를 보장한다. 2. 카프카에 메시지를 쓸 때 리플리카에 메시지를 복제하는 작업의 구성으로 신뢰성을 조절할 수 있다. 만약 acks 를 높게 두고 요청에 실패했다면 프로듀서에서 다시 재시도 할 수 있다. - acks = 0 메시지를 보내고 확인을 하지 않는다. - acks = 1 리더가 메시지를 썼는지 확인한다. - acks = all 모든 동기화 리플리카에 복제되었는지 확인한다. 3. 최소한 하나의 리플리카가 살아있다면 메시지는 유실되지 않는다. 4. 컨슈머는 모든 리플리카에 커밋된 메시지만 읽..
2021.04.14 -
[🧙Kafka] 카프카 개념 - 카프카 내부 이해하기
About 카프카의 내부를 다 이해할 필요는 없지만 어느정도 알아두면 좀 더 최적화하거나 문제가 발생했을 때 해결하는데 도움이 된다. 내부 매커니즘 클러스터와 주키퍼 컨트롤러 브로커 중 하나이고 리더를 선출해야하는 역할을 가지고 있다. 클러스터를 시작할 때의 첫 번째 브로커가 컨트롤러로 임명된다. 모든 브로커는 시작될 때 주키퍼에서 /controller 노드가 없으면 생성하려고 한다. 컨트롤러 브로커에 문제가 생기면 카프카의 Watch가 브로커들에게 컨트롤러가 사라졌다고 알려준다. 그러면 브로커들은 /controller 노드를 생성하려고 시도한다. 첫 번째로 생성한 노드가 컨트롤러가 되며 새로운 세대 번호를 받게 된다. 브로커들은 새로운 세대 번호를 알게 되고, 이전 세대 번호의 브로커에서 명령이 오면 ..
2021.04.13 -
[🧙Kafka] 카프카 구축 (9) - 카프카 컨슈머로 카프카에서 데이터 읽기
About 이전에 카프카에서 Producer로 메시지를 보냈는데 메시지를 소비하기 위해 Consumer를 만들어보려고 한다. 컨슈머 그룹(Consumer Group) 프로듀서가 생산한 메시지를 하나의 컨슈머가 따라갈 수가 없다면 여러개의 컨슈머를 두어야 한다. 카프카 컨슈머는 컨슈머 그룹에 속한다. 하나의 컨슈머 그룹에서 파티션이 4개일 때 컨슈머가 2개라면 2개씩 나눠가지고, 컨슈머가 4개라면 파티션을 1개씩 나눠가진다. 만약 5개라면 컨슈머 하나는 메시지를 받을 수 없다. 컨슈머 그룹 하나에서는 서로 다른 메시지를 수신하여 처리를 한다. 실시간 처리를 하는 곳과 메시지의 데이터를 저장하는 곳을 따로 두고 싶다면 컨슈머 그룹은 두개가 필요하다. 리밸런싱(rebalancing) 토픽의 파티션 1개의 소유..
2021.04.11 -
[🔥Spark] 스파크로 머신러닝 시작하기
스파크 기본 파이썬에서 스파크 사용하기 SparkContext의 인스턴스를 만들면 스파크 클러스터에 연결해서 사용할 수 있게 해준다. SparkConf로 스파크에 대한 구성을 할 수 있다. sc = SparkContext.getOrCreate() # Verify SparkContext print(sc) # Print Spark version print(sc.version) 데이터프레임 사용하기 스파크의 코어 데이터 구조는 RDD라고 하는데 Resilient Distributed Dataset(탄력성있는 분산된 데이터셋) 이라는 뜻이다. RDD는 낮은 레벨에 있어서 사용하기 어렵기 때문에 Spark DataFrame 이라는 더 높은 레벨의 데이터프레임을 사용하는 것이 편하다. Spark DataFrames..
2021.04.10 -
[🧙Kafka] 카프카 구축 (8) - Serializer: JSON vs Avro vs Thrift 비교
About 카프카에서 데이터를 전송할 때 직렬화를 통해 바이너리 배열로 변환해야 한다. 직렬화를 하는 이유는 어떤 값을 참조하는 주소가 담긴 변수를 저장했다고 했을 때, 다시 불러오게 된다고 해도 가르키던 값의 주소가 달라졌기 때문에 의미가 없다. 그래서 참조 값(Reference Type)은 저장하거나 보낼 수 없고 값(Value Type)만 저장하거나 보낼 수 있다. Serializer JSON 파이썬에서 직렬화, 역직렬화 방법은 다음과 같다. 파이썬 프로그래밍을 하면 array, dict 타입의 데이터를 파일로 저장하거나 불러올 때 아래의 함수(직렬화 및 역직렬화)를 자주 사용하게 된다. 스키마가 따로 존재하지 않아서 데이터를 보낼 때 전부 보내야하는 부담이 있다. # 직렬화 json_value =..
2021.04.09 -
[🧙Kafka] 카프카 구축 (7) - 카프카 프로듀서 파이썬에서 구현하기
About 카프카는 Java를 제공하지만 go, python 등에서 서드파티에서 사용할 수 있도록 해주기도 한다. 이번에는 파이썬 애플리케이션에서 카프카로 보내는 방법과 추가 구성들을 알아보려고 한다. Example bootstrap.servers 최초 연결을 위한 브로커 서버 목록을 설정한다. 모든 브로커를 포함할 필요는 없지만 여러개로 설정해두어야 부트스트랩 서버 중 하나가 문제가 생겼을 때 다음 서버로 시도할 수 있다. key.serializer 메시지의 키를 직렬화할 직렬처리기의 이름을 여기에 설정한다. 직렬처리기는 객체를 Byte Array로 변환해준다. ByteArraySerializer, StringSerializer, IntegerSerializer라는 직렬처리기가 존재하고 사용자가 직접 ..
2021.04.09