본문 바로가기

분류 전체보기147

[Kafka] 원하는 tweet을 Kafka에서 ElasticSearch로 보내기 'Stéphane Maarek - Learn Apache Kafka for Beginners v2'를 보고 작성한 글입니다. 😀 1. Twitter APPs Twitter Apps 에서 회원가입을 하고 간단한 앱을 만들어 key랑 token을 받는다 2. Producer with Twitter API Twitter API를 통해 원하는 tweet을 kafka로 가져와야한다. 이번 예제에서 사용할 API는 twitter java api를 이용한다 github를 들어가보면 Quickstart를 통해 쉽게 사용이 가능하다 3. Twitter Producer Kafka Producer와 Twitter API를 사용하기 위해 build.gradle에 dependency를 추가한다 dependencies { tes.. 2021. 11. 23.
[Kafka] Advanced Topic Configurations 'Stéphane Maarek - Learn Apache Kafka for Beginners v2'를 보고 작성한 글입니다. 😀 Topic Configurations 에 관심을 가져야하는 이유 브로커에는 모든 Topic Configuration parameter 에 대한 기본값이 있다. 이러한 parameter 는 성능 및 토픽 동작에 영향을 준다. 일부 항목에는 기본값과 다른 값이 필요할 수 있다. Replication Factor Number of Partitions Message size Compression level Log Cleanup Policy Min Insync Replicas Other configurations partitions and Segments 토픽은 파티션으로 구성된다. 파.. 2021. 11. 23.
[Kafka] Partitions Count, Replication Factor 'Stéphane Maarek - Learn Apache Kafka for Beginners v2'를 보고 작성한 글입니다. 😀 Partitions Count, Replication Factor 토픽을 만들 때 가장 중요한 두 가지 매개 변수이다 전체 시스템의 성능과 내구성에 영향을 미친다 매개 변수를 처음부터 올바르게 설정하는 것이 가장 좋다 토픽 수명주기 동안 파티션 수가 증가하면 키의 순서 보장이 깨진다 토픽 수명주기 동안 복제 계수가 증가하면 클러스터에 더 많은 압력을 가하여 예기치 않은 성능 저하로 이어질 수 있다 Partitions Count 각 파티션은 MB/s 단위의 처리량을 다룰 수 있다 파티션의 개수가 많을수록 : 병렬 처리 및 처리량 향상 그룹에서 더 많은 컨슈머를 실행하여 확장 가능.. 2021. 11. 23.
[Kafka] Extended APIs - Connect, Stream, Schema Registry 'Stéphane Maarek - Learn Apache Kafka for Beginners v2'를 보고 작성한 글입니다. 😀 Kafka Connect and Stream 4가지 일반적인 Kafka 사용 사례 Source => Kafka Producer API Kafka Connect Source Kafka => Kafka Consumer, Producer API Kafka Streams Kafka => Sink Consumer API Kafka Connect Sink Kafka => App Consumer API Kafka Connect Source Connector : 공용 데이터 소스에서 데이터를 가져오는 것 Sink Connector : 공용 데이터 저장소에 데이터를 게시하는 것 데이터를 빠르고.. 2021. 11. 23.
[Kafka] Advanced Consumer Configurations 'Stéphane Maarek - Learn Apache Kafka for Beginners v2'를 보고 작성한 글입니다. 😀 Delivery Semantics for Consumers At most once 메시지 배치가 수신되는 즉시 오프셋이 커밋된다 처리가 잘못되면 메시지가 손실된다 (다시 읽지 않음) At least once 메시지가 처리된 후 오프셋이 커밋된다. 처리가 잘못되면 메시지를 다시 읽는다 이로 인해 메시지가 중복 처리 될 수 있다 처리가 멱등성(idempotent)인지 확인한다 (즉, 메시지를 다시 처리해도 시스템에 영향을주지 않음) Exactly once Kafka -> Kafka 는 Kafka Stream API 사용 Kafka -> Sink 는 Idempotent Consume.. 2021. 11. 23.
[Kafka] Advanced Producer Configurations 'Stéphane Maarek - Learn Apache Kafka for Beginners v2'를 보고 작성한 글입니다. 😀 Acks & min.insync.replicas acks = 0 (no acks) ack 를 요청하지 않음 브로커가 오프라인 상태가되거나 exception 이 발생하면 데이터가 손실될 수 있다 데이터를 손실해도 괜찮은 것에 유용 Metrics collection Log collection acks = 1(leader acks) 리더 브로커의 ack 는 요청하지만 레플리케이션은 보장하지 않음 ack 를 받지 못하면, 프로듀서는 재전송할 수 있다 리더 브로커가 오프라인 상태가되었지만 레플리케이션이 아직 데이터를 복제하지 않을 경우 데이터가 손실된다 acks = all (replic.. 2021. 11. 23.
[Kafka] Kafka Theory (기본 개념) 'Stéphane Maarek - Learn Apache Kafka for Beginners v2'를 보고 작성한 글입니다. 😀 Topic, Partition and Offset Topic : 특정 데이터 스트림 데이터베이스의 테이블과 유사 (제약이 없음) 원하는만큼 토픽을 가질 수 있다 토픽은 토픽의 이름으로 식별된다 (중복 x) 토픽은 여러 partiton 으로 나누어진다 파티션 내의 각 데이터는 offset 이라는 incremental id를 가진다 오프셋은 해당 파티션 내에서만 유효하다 E.g 파티션 1과 파티션 2의 오프셋은 서로 다르며 같다 하더라도 다른 데이터를 나타낸다 토픽의 순서는 파티션 내에서만 보장된다 (파티션 간의 순서는 보장 x) 데이터가 파티션에 기록되면 변경할 수 없다 (imm.. 2021. 11. 23.
[Kafka] Kafka Stream 에제 4 - user-event-Enricher (join) 'Stéphane Maarek - Kafka Streams'를 보고 작성한 글입니다. 😀 1. 에제 설명 inner join 과 left join 활용 2. build.gradle 설정 plugins { id 'java' } group 'hardenkim.github.io' version '1.0' repositories { mavenCentral() } dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' compile group: 'org.apache.kafka', name: 'kafka-streams', versi.. 2021. 11. 23.
[Kafka] Kafka Stream 에제 3 - bank-balance-exactly-once 'Stéphane Maarek - Kafka Streams'를 보고 작성한 글입니다. 😀 1. 에제 설명 은행 입출금 예제 Producer exactly once 를 위해 idempotent producer 활용 Ex : { "Name":"John", "amount":100, "time":"2021-04-014T12:00:00"} Stream exactly once processing 활용 사용자의 거래를 처리하고 총 금액과 최신 업데이트 시간을 계산 2. build.gradle 설정 plugins { id 'java' } group 'hardenkim.github.io' version '1.0' repositories { mavenCentral() } dependencies { testImplement.. 2021. 11. 23.