최신 글
-
golang map[string]interface 데이터를 avro 포맷으로 파일 저장하는 방법 package main import ( "encoding/json" "fmt" "github.com/linkedin/goavro" "os" "time" ) func main() { // Avro 스키마 정의 schemaJSON := `{ "type": "record", "name": "Example", "fields": [ {"name": "username", "type": "string"}, {"name": "age", "type": "int"} ] }` codec, err := goavro.NewCodec(schemaJSON) if err != nil { panic(err) } // 파일 생성 file, err := os.Create("avro_data.avro") if err != nil { pan..
-
Kafka 카프카에서 계층 저장소(Tiered storage)가 필요한 이유 2020년 11월 Cofluent Platform 6.0이 릴리즈되면서 카프카의 계층 저장소가 처음으로 대중에게 소개되었습니다. 이전까지 카프카 오픈소스 진영에서 많이 논의 되었지만 실제로 개발자가 사용 가능한 형태로 나온 것은 이때가 처음입니다. 컨플루언트를 사용하는 많은 개발자와 회사에서는 카프카의 계층 저장소를 사용해왔습니다. 이후 2023년 10월, 오픈소스 카프카 3.6.0이 릴리즈 되면서 계층 저장소 얼리 엑세스 모드를 사용할 수 있게 되었습니다. 카프카에서 계층 저장소는 현재의 브로커 구조에서 아주 중요한 역할을 수행하게 될 것입니다. 계층 저장소는 많은 장점이 있겠으나 그 중 핵심은 비용 절감이라고 생각합니다. 비용 절감에는 크게 두가지가 있는데 컴퓨팅 리소스 비용과 휴먼 리소스 비용입니..
-
Kafka 신뢰성 있는 카프카 애플리케이션을 만드는 3가지 방법 카카오 공개 기술 세미나인 kakao tech meet에서 '신뢰성 있는 카프카 애플리케이션을 만드는 3가지 방법' 에 대해 발표하는 자리를 가졌습니다. https://www.youtube.com/watch?v=7_VdIFH6M6Q 이벤트 드리븐 아키텍처와 스트림 데이터 파이프라인을 만들때 고민해야 하는 부분을 다룹니다. 프로듀서/컨슈머와 같은 카프카 애플리케이션의 전달 신뢰도를 높이기 위해서 적용할 수 있는 기술들에 대해 설명하고 내부적으로 적용했던 경험을 공유합니다. 카프카에서 다루는 신뢰도에 대해 다시 한 번 고민해보고, 내가 만든 애플리케이션이 고객에게 어떻게 가치를 줄 수 있는지 생각해볼만한 주제도 함께 알려드립니다.
-
Kafka 카프카 프로듀서의 acks=all 옵션은 사실(?) 느리지 않다! 카프카 3.0 부터는 카프카 프로듀서의 acks 옵션이 all로 지정됩니다. acks=all이 기본값으로 지정된 이유 중 하나는 프로듀서와 브로커 간 통신을 멱등성(idempotence)있게 만들기 위함입니다. 프로듀서와 브로커는 acks를 통해 레코드가 전송되었는지 확인합니다. 문제는 acks가 유실되었을 경우입니다. 네트워크 상태, 브로커 상태에 따라서 언제든 유실될 수 있는 acks를 정상적으로 전송하기 위해서는 acks를 위한 acks(!)를 만들어야만 합니다. 이는 두 장군 문제 알고리즘과 동일하다고 볼 수 있습니다. 결과적으로 프로듀서의 중복 전달을 제거하기 위해 카프카 3.0부터는 enable.idempotence가 true로 변경되었고 이에 딸려오는 추가 옵션인 acks가 all로 설정되게..
-
Kafka 기존에 생성된 compact topic의 cleanup.policy를 변경하는 방법 현재 cleanup.policy 확인 $ ./kafka-topics.sh --bootstrap-server localhost:9092 --topic compact- test --describe Topic: compact-testPartitionCount: 1ReplicationFactor: 1Configs: cleanup.policy=compact,segment.bytes=1073741824 Topic: compact-testPartition: 0Leader: 0Replicas: 0Isr: 0 kafka-configs.sh를 사용하여 토픽 수정 $ ./kafka-configs.sh --bootstrap-server localhost:9092 --alter --entit y-type topics --ent..
-
Kafka Compacted topic에 null key 레코드를 전송하면? Compacted topic에 null key를 전송(produce)하면 어떻게 될까요? 1) Compacted 토픽 생성 $ ./kafka-topics.sh --bootstrap-server localhost:9092 --topic compact-test --config "cleanup.policy=compact" --create Created topic compact-test. $ ./kafka-topics.sh --bootstrap-server localhost:9092 --topic compact-test --describe Topic: compact-testPartitionCount: 1ReplicationFactor: 1Configs: cleanup.policy=compact,segment.b..
-
Kafka 아파치 카프카 Exactly-once 처리의 진실과 거짓 아파치 카프카와 같은 분산 이벤트 스트리밍 플랫폼을 사용하거나 메시지 브로커를 활용하다 보면 항상 마주치는 문제는 마로 메시지 전달 시멘틱(message delivery semantic)입니다. 메시지 전달 시멘틱은 A지점에서 B지점으로 데이터를 전송할 때 어느 만큼의 신뢰도로 데이터를 전송하는지에 대한 정의입니다. 즉, 특정한 장애 상황(또는 임계치를 벗어난 상황)에서도 보증하는 데이터 전달 신뢰도라고 볼 수 있습니다. 메시지 전달 시멘틱은 크게 세가지로 나뉩니다. 적어도 한번(at least once), 많아도 한번(at most once), 정확히 한번(exactly once). '적어도 한번'은 데이터가 전달될 때 유실이 발생하지는 않지만 중복이 발생할 가능성이 있음을 뜻합니다. 아파치 카프카는 ..
-
개발이야기 [개발자를 넘어 기술 리더로 가는 길]읽고 정리 타냐 라일리 https://www.linkedin.com/in/tanyareilly/ 타냐 라일리는 중간급 엔지니어가 되었을 때 매니저가 되고 싶지 않았고 '스태프 엔지니어의 길'로 가고 싶었다. 기술 전략 수립, 조직을 성공적으로 이끌기 위한 방법에 대해 고민했고 이에 대한 내용을 정리했다. 두 가지 진로 개발자는 크게 두가지 진로가 있다. 1) 매니저 - 명확하게 소통 - 위기 상황에서 침착함 유지 - 동료들이 더 나은 일을 할 수 있도록 도움 - 많은 사례들이 나와 있음 2) 스태프 엔지니어(기술 리더) - 불분명한 길 타냐 라일리가 생각하는 스태프 엔지니어의 필요한 역할 3가지 1) 빅 픽처 관점의 사고력 : 현재 상황에 대해 인지하고 기업에 필요한 것이 무엇인지 파악하여 n년 단위 프로젝트 진행..
-
Kafka 모던 데이터 플로우: 데이터 파이프라인을 잘 운영하는 방법 https://www.confluent.io/events/kafka-summit-london-2022/modern-data-flow-data-pipelines-done-right/ Kafka Summit London 2022 Keynote | Jay Kreps, CEO, Confluent featuring Avi Perez, Wix.com Confluent is building the foundational platform for data in motion so any organization can innovate and win in a digital-first world. www.confluent.io 메이븐에서 카프카 자바 라이브러리의 사용율이 급격하게 올라가는 것을 볼 수 있음. 그만큼 카프카의 사..
-
golang golang struct type을 JSON으로 Print 하기 package main import ( "encoding/json" "fmt" ) type Person struct { Name string Age int } func main() { myStruct := Person{"dvwy", 145} fmt.Println("=======") fmt.Println(myStruct) fmt.Println(prettyPrint(myStruct)) } func prettyPrint(i interface{}) string { s, _ := json.MarshalIndent(i, "", "\t") return string(s) } 결과는 다음과 같습니다. {dvwy 145} { "Name": "dvwy", "Age": 145 } 출처 : https://stackoverflo..
인기글
-
하둡 Hdfs dfs 명령어 정리 및 설명(ls, cat, du, count, copyFromLocal 등) Hadoop을 적절히 사용하기 위해서는 hdfs 명령어를 알아야 한다. 아래에 정리를 해 보았다. ※ 2.6.0 version을 기준으로 정리함 Hadoop 명령어 Hadoop filesystem command를 사용하기 위함. Usage : hdfs dfs [GENERIC_OPTIONS] [COMMAND_OPTIONS] HDFS 명령어 File System(FS) shell은 Hadoop Distributed File System(HDFS)를 여타 파일시스템처럼 관리하기 위한 목적으로 command를 사용할 수 있다. Hadoop-2.6.0에서는 총 33개의 HDFS 명령어를 지원한다. 1) appendToFile Local 파일들을 hdfs에 append 저장하기 위한 목적 Usage: hdfs df..
-
servlet container [linux] netstat 명령어 설명 및 예제 netstat 소개netstat(network statistics)는 전송 제어 프로토콜, 라우팅 테이블, 수많은 네트워크 인터페이스(네트워크 인터페이스 컨트롤러 또는 소프트웨어 정의 네트워크 인터페이스), 네트워크 프로토콜 통계를 위한 네트워크 연결을 보여주는 명령 줄 도구이다. OS X, 리눅스, 솔라리스, BSD를 포함한 유닉스 계열 운영 체제와 윈도우 XP, 윈도우 비스타, 윈도우 7, 윈도우 8, 윈도우 10을 포함한 윈도우 NT 기반 운영 체제에서 이용이 가능하다. 네트워크의 문제를 찾아내고 성능 측정으로서 네트워크 상의 트래픽의 양을 결정하기 위해 사용된다.리눅스에서 net-tools의 일부인 netstat은 시대에 뒤쳐진 것으로 간주되며, iproute2의 일부인 ss를 대신 사용하여야 한..
-
JS & JQuery [JavaScript]변수내용이 json인지 확인하는 method(check valid json) js에서 사용하고 있는 variable이 json인지 여부를 확인하고 싶을때가 있다. npm을 사용한 여러 library를 사용하는 방법도 있지만 아래와 같이 간단한 method를 활용하는 방법도 있다. function IsJsonString(str) { try { var json = JSON.parse(str); return (typeof json === 'object'); } catch (e) { return false; } } JSON.parse(str) 메서드 ECMAScript 2015의 standard method이다. JSON.parse(str)는 json의 문자열 구문을 분석하고 들어온 파라미터를 js값이나 객체로 생성한다. 이때 정상적인 json type이 아닌경우 exception을 반..
-
개발이야기 NAT IP란? NAT는 Network Address Translation의 줄임말 입니다. NAT는 사설 네트워크에 속한 여러 개의 호스트가하나의 공인 IP 주소를 사용하여 인터넷에 접속하기 위해 사용합니다. 쉽게말해서 외부망과 내부망을 나눠주는 기능을 하게 되는 것입니다. NAT 특징 - 내부에서 외부로 통신 가능 - 외부에서 내부로 통신 불가 NAT 장점 - 여러 사설 네트워크를 사용함으로서 인터넷 공인 IP 주소를 절약 가능. - 사내망 IP주소를 외부로 알리지 않음으로서 외부로 부터의 침입/공격 차단 NAT 단점 - 네트워크 복잡성 증가 - 네트워크 지연 영향 NAT 종류 - Static NAT : 사설IP와 공인 IP를 1:1 매핑 - Dynamic NAT : 다수 공인 IP와 다수 사설 IP 매핑 - PAT..
-
Kafka 카프카 auto.offset.reset 종류 및 사용방법 카프카에서 consumer를 새로 생성하여 topic에서부터 데이터를 가져오기 위해서는 여러 옵션이 필요한데 그 중 하나는 auto.offset.reset입니다다. 이 auto.offset.reset의 역할에 대해 알아보겠습니다. 아래 글은 Kafka-client, Kafka broker 2.4 기준으로 작성하였습니다. auto.offset.reset auto.offset.reset에서 offset은 consumer offset입니다. 만약 이번에 topic에 붙은 consumer의 offset정보가 존재하지 않는다면 auto.offset.reset의 default값(latest)이나 또는 설정한 값을 따라가게 됩니다. auto.offset.reset - latest : 가장 마지막 offset부터 - ..
-
빅데이터 프로메테우스 지표 rate와 increase의 차이점 프로메테우스로 다음과 같은 지표들을 쌓을 때가 있습니다. http_request_count_total{method="POST",router="/"} 10 http_request_count_total{method="POST",router="/"} 15 http_request_count_total{method="POST",router="/"} 20 http_request_count_total{method="POST",router="/"} 40 http_request_count_total{method="POST",router="/"} 45 http_request_count_total{method="POST",router="/"} 60 상기와 같은 지표는 http request때 마다 counter를 1씩 in..
-
개발이야기 결혼식 청첩장 Github blog로 세련되게 만들기. 후기! 2019년 5월 18일. 이날은 여자친구와 4년 그리고 1일 되는날, 그리고 결혼식이 열렸던 날이다. 결혼식을 준비하면서 만든 github.io blog기반 모바일 청첩장을 만들게 된 이유와 만들기까지의 과정에 대해 이야기 하고자 한다. 결혼식을 위해 뼈발자(뼈속까지 개발자)인 나는 어떻게 결혼식을 준비하는데 있어 실력을 발휘할까 고민하던 도중 모바일 청첩장을 직접! 만들어보면 어떨까 아이디어를 생각하였다. 모바일 청첩장을 직접 만들고자 한 이유는 아래와 같았다. 첫째. 바른x, 더카x 등 종이 청첩장을 만들어주는 사이트의 디자인이 마음에 안든다. 둘째. 무료로 청첩장을 만들어 주는 사이트는 시간이 지나면 만료되어 더이상 조회가 불가능하다. 셋째. 선물 예약 기능. 친구들에게 필요한 선물을 알려주고 예약..
-
Java & Scala Java 8 에서 사라진 maxPermSize, PermSize을 대체하는 옵션? 아래 포스팅은 HotSpot JVM을 기준으로 설명합니다. JVM architecture(오라클 GC설명페이지) Java 7에서 있던 -XX:MaxPermSize=size, -XX:PermSize=size option들은 이제 Java 8에서는 Deprecated되었다. 더 정확히는 metaSpaceSize로 대체(superseded)되었다고 볼 수 있다. 그래서 많은 개발자들이 java7에서 8으로 업그레이드 한 이후에 아래와 같은 warning 메시지를 본적이 있을 것이다. Java HotSpot(TM) Server VM warning: ignoring option PermSize=32m; support was removed in 8.0 Java HotSpot(TM) Server VM warning:..
-
JS & JQuery jqeury 스크롤 내리다가 특정 영역(부분) 이벤트 발생시키기 웹을 개발하다가 보면 스크롤을 내리다가 특정부분이 되면 혹은 특정 div가 나오게 되면 이벤트를 발생시키고 싶어 할 때도 있다. 아닐때도 있고, 갑자기 하고싶을 때도 있다. 이때 아래와 같이 사용하게 되면 이벤트를 딱 한번만 발생을 시킬 수 있다. HTML scroll down to see the div CSS body, html { height: 100%; } #wrapper { height: 400%; background: none repeat scroll 0 0 #f99ccc ; text-align:center; padding-top:20px; font-size:22px; } #tester { padding-top:1200px; height: 600px; background: none repeat ..
-
Kafka 카프카의 토픽 데이터를 REST api로 주고받자 - Kafka rest proxy 사용 confluent에서는 rest proxy라고 불리는 카프카 클러스터를 위한 RESTful interface application을 오픈소스로 제공하고 있습니다. 기존에 Kafka connect, Kafka client로 데이터를 전달하는 것과는 사뭇 다르게 REST api를 사용한다는점이 독특한데요. 직접 코드를 짜지 않고 범용적으로 사용되는 http을 사용해서 데이터를 넣고 뺄 수 있다는 점이 독특합니다. 오늘은 rest proxy를 local에 설치하고 실행해보겠습니다. 준비물 - local kafka cluster - git - terminal - postman 다운로드 및 실행 rest proxy를 사용하기 위해서는 rest proxy가 포함된 confluent의 community package..
728x90