레이블이 kafka인 게시물을 표시합니다. 모든 게시물 표시
레이블이 kafka인 게시물을 표시합니다. 모든 게시물 표시

2022-02-20

0220 카프카 설정을 위해 알아야하는 것들

 - 운영체제

- 서버 아키텍처

- distributed computing

- cpu 

-network performance

-  disk I/O

- RAM , HEAP사이즈

- 페이지 캐시

- 카프카와 주키퍼

---

- swappiness설정 : 최대한 disk I/O를 줄이고 메모리를 사용하라

- KAFKA_HEAP_OPTS : java heap메모리설정 . Xms는 설정하지 않는다 시작하면서 점점 메모리 늘려가면 됨. starting heap메모리를 고정할 필요 x

- 나머지 남는 메모리는 페이지 캐시로서 이용한다

- 카프카는 데이터 파싱을 따로 하지 않으므로 빠르다. 그러나 SSL등 설정한경우 이에대한 cpu성능이 필요할 수 있음

- file 디스크립터 설정을 무지 크게 해두어야 함. 1개 파티션의 1개 세그먼트 별로 3개의 file오픈하기 때문에 부딪힐수있다

- delete토픽을 하면 일단 delete했다는 태그 표시를 달고 - 일정시간 경과후 실제 삭제된다. 이 시간 gap이 있으므로 여유있게 메모리 설정해두어야 함

- disk I/O : 부족한 경우 EBS 더 mount한다

- network : 카프카 클러스터 region최대한 가깝게. (latency) + bandwidth설정 고려

0220 zookeeper

 1. zookeeper역할

- 브로커 등록

- leader브로커 선출

- 각종 config 관리(ACL등)

- Topic관리

- 클러스터 관리

2. zookeeper 적절한 개수

- 주키퍼는 vote시스템이다.

- voting 정족수는 과반수이다. 따라서 홀수로 설정하는 것이 적절하다.

- 1, 3, 5, 7....(2n+1) 개의 zookeeper

- 1개의 주키퍼 -> 죽으면 안됨

- 3개의 주키퍼 -> 1개까지 죽어도 ok (보통 그래서 3개로 많이 함)

- 5개의 주키퍼 -> 2개까지 죽어도 ok.(정말정말 정말 커다란 카프카 시스템을 구축하고자 할때. 거의 없음. 5개의 주키퍼가 서로 소통한다)



+ broker적절한 개수

- n-1개 까지 죽을수있다

- 보통은 3개

0220 카프카 remote서버에 접속하기

 1. aws인스턴스생성

2. advertised.hostname에 public dns를 적는다(이상하게 . ip를 적으면 접속이 안되더라.. 이유를 모르겠음)

3. security group 9092열어둔다

4. --bootstrap-server 를 public ip로 해서 접속한다

2022-02-19

0218 카프카 브로커에 연결되지 않는현상

 1. virtualbox에 ubuntu로 zookeeper, kafka server , producer띄우고

2. NAT설정

3. 포트포워딩 9092로 열어두고

4. 로컬에서 9092포트로 consumer접속

5. Connection to node 0 could not be established. Broker may not be available 에러

server.properties

6. advertised.listeners=127.0.0.1://9092


변경후 잘됨!!ㅇㅇ


0218 kafka consumer group 에 load분배되지 않는현상

 cpu mem 1GB

KAFKA_HEAP_OPTS -Xmx400 -Xms400

으로 설정했을때

카프카 컨슈머 그룹을 설정해도 리더 컨슈머에게만 데이터가 가는현상 발생

(인스턴스 1개에서 zookeeper, producer, consumer 다 돌렸더니. 오버헤드 나는듯)

메모리를 4GB로 늘려서 다시 시도해보니 이번엔 골고루 분배됨


2022-02-18

0218 kafka begining

 - consumer group끼리는 load를 분할한다

- from-begning이라고 할지라도 그 분담한 offset부터 읽음 

0218 kafka fundamentals

 1. Topic

: 데이터

2. Partition

: 토픽 은 각각의 파티션으로 나누어짐, 파티션은 오프셋을 가지고 있음, 파티션 안에서만 order를 보장

3. Broker 

: 서버 역할. 여러 파티션을 가지고 있을 수 있음. 

4. Replication

: 리더 브로커는 오로지 한명뿐. 카프카 주키퍼가 리더파티션을 뽑고 걔가 죽으면 다시 선출하는 것을 뒤에서 조정

5. ISR

:in sync replicaiton. 리더 브로커는 오로지 한명, 나머지는 전부 그냥 데이터 복제만. 머리가 두개 되는것을 방지 -sync로 한다.

6. Producer

: 데이터를 만드는 주체, source로부터 여러 파티션에게 데이터를 보낸다

7. Partition key

: null일 경우 라운드로빈으로 그냥 파티션 암데나 보내짐, 키 해싱하여 지정(예를들면 pk) 할경우 해당 해싱된 파티션으로만 데이터가 들어가게 된다.

8. consumer

: 카프카로부터 데이터를 받아서 . process한뒤 목적 대상으로 보낸다

9. offset

: 데이터베이스커밋같은개념. 나 process했어 - 후에 커밋할건지아님 걍받았기만하면 커밋할건지조정- 이것으로. 성능 & 데이터 중복의 반비례 관걔

10. consumer group

: 하나의 어플리케이션. 내 경우에는 java어플리케이션이라고 생각하면 됨. 파티션개수>=컨슈머그룹개수.

11. zookeeper

:레디스 센티넬같은. 브로커들을 관리하고, topic 의 변경사항을 nofify하는 역할, 선출의 right이 있다

12. kafka discovery

: 메타데이터를 보낸다. 프로듀서는 메타데이터를 받아서 카프카와 소통, 직접적으로 파티션과 관계맺지않음


2022-01-06

1/6 카프카 컨슈머 그룹 테스트

 



파티션 3으로 나누었음

데이터가 파티션별로 슉슉 들어간다. 

컨슈머가 꺼져있는 동안 lag가 발생하는것확인할수있음

더불어 다시 키면- 파티션전부 subscribe하고있었기 때문에 순서 보장없이 막들어온다

순서를 보장하려면?? 파티션을 1개만 만들고.. 할당한다!

1/6 로컬에 우분투 설치, 카프카 실험

  



./bin/kafka-console-consumer.sh --bootstrap-server 13.124.113.23:9092 -topic test-02 --from-beginning

./bin/kafka-console-producer.sh --bootstrap-server 13.124.113.23:9092 --topic test-02


1/6 aws에 카프카 설치, 로컬에서 실험

 

.\bin\windows\kafka-console-consumer.bat --bootstrap-server 13.124.113.23:9092 --topic test-01 --from-beginning


.\bin\windows\kafka-console-producer.bat --bootstrap-server 13.124.113.23:9092 --topic test-01

2022-01-02

1/2 카프카 설치 및 실행

 1. 아파치 홈페이지 혹은 homebrew 이용하여 카프카 설치

2. 주키퍼 실행( 브로커들을 관리하고, 리더 브로커를 선출하는 역할)

- 이전에, localhost 가 listen 할수있도록 config 파일을 수정한다. 

3. 카프카 서버 실행

4. 카프카 토픽생성 


5. 프로듀서 실행
6. 컨슈머 실행


- 카프카의 장점:

다양한 데이터 소스가 있을수있다. 몽고 DB같은 형식, RDB형식등등.. 프로듀서도 다양하고 컨슈머도 다양하다. 프로듀서 입장에서 일일이 이 컨슈머의 타입에 맞추어서 convert 하기란 이만저만 복잡한것이 아니다. 일일이 컨버터를 구현하고 커스터마이징해야하므로

- 이때 카프카와 같은 미들웨어를 사용하면 . 보내는 쪽도 받는쪽도 커스터마이징 필요없이 카프카만 상대하면 된다. !! 

2021-09-05

0904 아파치 카프카 실습 준비

 1. 아마존 aws console이용해서 리눅스환경을 만들자

2. EC2인스턴스 생성(프리티어). 더불어서 key도 새로 만들어서 받아놓자.

3. 인바운드 규칙 편집.

인바운드란 ? 외부에서 -> 해당 서버(내경우에는 EC2서버) 로 들어올 수 있는 아이피 및 포트번호 설정. 주키퍼 및 카프카에서 해당 인스턴스에 접근할 수 있도록 포트번호와 아이피를 열어둔다. 이번은 시험용이니까 anywhere로 해도 괜찮지만.. 실제라면 ip를 특정해주는 것이 보안상 안전할 것이다! 

아웃바운드란 ? EC2서버 에서 -> 바깥 네트워크로 나가는 설정. 기본적으로모두열려있음. 

4. puttygen을 사용해서 private key를 만들고 저장한다.

5. putty를 사용해서 Auth란에 해당 프라이빗 키를 넣고, public ip 에 EC2의 ip를 넣고 접속한다.

6. 나는 이번에 amzon2타입인스턴스로 만들었기 때문에 - 기본적으로 유저네임은 ec2-user이다.


접속 성공.



자바 및 아파지 카프카 설치. wget 명령어(web상에 있는 파일을 다운로드 할 수 있게 해주는 명령어) 를 이용 + tar 명령어로 압축을 푼다. 

0328 fdisk, mkfs, mount, fstab

 1. 하드디스크를 붙인다. 2. fdisk -l로 하드디스크를 확인한다.  - interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다.  - 마지막에 w를 해야 실제로 반영이 된다.  3. mkfs를 하여 어떤 파일시스...