본문 바로가기

dev/Cloud & Infra

kafka 개발 - AdminClient 로 관리 기능 개발하기 - Broker 정보 보기 KAFKA 한국 사용자 모임(https://www.facebook.com/groups/kafka.kru/)에는 Kafka를 사용하는 사람들이 많은 정보와 질문, 답변을 올려주는 곳이다. 이곳에서 내가 설정한 기본 Property 말고 Broker에 설정된 전체 Property를 볼 수 없을지에 대한 질문이 올라와 그 부분에 대해서 코드를 작성하다. 예전부터 해 오던 AdminClient 와 관련된 내용을 전체적으로 한 번 정리하자는 취지에서 포스팅을 하게 되었다. 2.3.0 기준으로 Kafka가 제공하는 API는 아래와 같다 Producer API Consumer API Streams API Connect API AdminClient API 오늘 살펴볼 API인 AdminClient는 0.11.0.0 에.. 더보기
kafka 운영 - kafka의 Exception들 - (1) Kafka를 운영하면서 이런 저런 에러메시지를 보게 됩니다. 그러고 문서를 찾아보거나 검색을 합니다. 그러면서 쌓아가는 지식도 있지만, 얻어 맞기 전에 대비를 하는 것도 괜찮겠다는 생각이 들었습니다. 개발자에게 있어 가장 좋은 교보재는 소스코드와 그 주석이라는 생각을 가지고 있기 때문에, Kafka 가 발생시키는 Exception 의 종류를 살펴보고, 이 Exception 은 어떤 상황에 발생하는지, Exception을 회피하기 위한 조건은 무엇이 있는지를 미리 알아두면, 좀 더 운영에 도움이 될 것 같아 Kafka의 소스코드를 참고하여 정리 해 보았습니다. Kafka의 Exception 구조 /** * The base class of all other Kafka exceptions */ public c.. 더보기
kafka 운영 - 기본적인 환경 설정 경험담 kafka 를 접한지 1년여의 시간이 흘렀고, 2018년 말부터 로컬 테스트부터 시작해, 테스트망, 검증망을 거쳐 운영망에서 kafka를 운영한지 3개월 정도가 되었습니다. kafka를 개인 컴퓨터에서 테스트용으로 쓸 때는 환경에 크게 고민을 하지 않고 기능적으로 제대로 돌아가는지를 신경 쓰지만 운영 시스템에 올리기 시작하면서부터는, 이 시스템의 환경을 어떻게 구성해야 최대한 안정적으로 돌아가게 될지, 성능을 더 끌어낼 방법은 무엇일지 이런 저런 고민을 하였습니다. 카프카, 데이터 플랫폼의 최강자, 카프카 핵심 가이드와 같은 좋은 책들의 도움을 받아 기본적인 것들을 공부하고, 운영 환경을 구성하면서, kafka를 구축하기 이전 ElasticSearch 를 구축했던 경험을 떠올리며, ElasticSearc.. 더보기
Kafka 보안 (2) - SASL/PLAIN 이전의 포스트에서 JAVA가 사용하는 JAAS 및 프로토콜-보안메커니즘을 분리하는 SASL 에 대해서 살펴보았다. kafka는 SASL의 몇 가지 메커니즘을 활용하여 주키퍼-브로커, 브로커-클라이언트 간의 인증을 적용할 수 있는데, 이번 포스트에서는 그 방법 중 가장 간단한 방법이라고 생각되는 SASL/PLAIN 에 대해서 소개하려 한다. SASL/PLAIN은 username/password 기반으로 인증을 수행하는 방식이며 안전한 인증을 위해서는 TLS 와 병행할 것을 권장한다. 이번 포스트에서 소개할 예제는 브로커-클라이언트 간의 SASL/PLAIN이며 TLS 없이 SASL/PLAIN 을 구현한다. 일단 이번 포스트에서 설명할 것의 순서는 아래와 같다 1. broker (kafka 서버) 설정 2. .. 더보기
Kafka 보안 (1) - JAAS 및 SASL 연초부터 Kafka를 활용해야겠다고 마음 먹고 겪은 프로세스를 살펴보면, 처음엔 제대로 설정해서 올리는 것에 중점을 두고, 설치 및 설정에 어느 정도 익숙해지니 설치 자체는 쉘스크립트를 만들어 어느 정도 한 번에 설치 및 서비스 구성이 되도록 할 수 있게 되었다. 그 다음으로는 안정적으로 굴러가는 것에 신경을 쓰자고 마음 먹고 JMX 메트릭을 모니터링 한다거나, 로그 파일에서 나타나는 각종 메시지들에 관심을 가지게 되었다. 그러고 나니, 다음으로 관심이 가는 것은 얼마나 Kafka 클러스터를 안전하게 굴릴 수 있느냐. 라는 것이다, 물론 현재 운영하고 있는 환경에서는 네트워크 방화벽 장비라든가 OS의 방화벽 설정 등을 통해 IP를 기반으로 허가 받지 않은 접근을 통제하고 있지만, 꼭 이런 환경에서만 한다.. 더보기
High Availability 를 위한 VRRP와 keepalived (2) - keepalived https://springboot.cloud/23 의 글에서 고가용성(HA)의 개념과 이를 달성하기 위한 프로토콜인 VRRP 에 대해서 살펴보았다. 운영 중인 장비에서 문제가 생겼을 때, 자동으로 예비 장비로 전환하여 서비스의 지속성을 유지 시켜주는 기능을 장애극복(failover)라고 한다. 이번 글에서는 리눅스에서 failover 를 위해서 사용하는 keepalived 에 대해서 살펴볼 것이다. keepalived란? 공식 홈페이지의 설명에 따르면 keepalived는 C로 작성된 로드밸런싱 및 고가용성을 제공하는 프레임워크이다. 로드밸런싱을 하기 위해서는 LVS(Linux Virtual Server)의 구성 요소인 IPVS를 사용한다. keepalived와 조합하여 HAPROXY 와 같은 로드밸런서.. 더보기
High Availability 를 위한 VRRP와 keepalived (1) - VRRP 웹서비스를 운영하면 부하 분산을 위해서 nginx 로 reverse proxy를 사용하거나 HAPROXY 같은 로드밸런서를 널리 사용한다. 물론 이러한 부하 분산은 서비스의 안정적인 운영을 위해서 좋은 방법이다. 그런데, nginx 나 HAPROXY가 설치된 서버가 죽거나 해당 서비스가 다운된다면? 그 뒤에서 웹 서버들은 멀쩡히 돌아가고 있는데, 안정적인 운영을 위해 올려놓은 녀석 하나 때문에 모든 서비스가 불능에 빠져버리는 결과를 초래한다. 로드밸런서 뿐 아니라 라우터와 같이 통신을 위해 꼭 통과해야하는 지점도 불능이 되면, 해당 지점의 전후가 살아 있더라도 전체적인 불능 상태를 초래할 수 있다. 위의 그림과 같이 한 지점이 동작하지 않으면 전체를 불능에 빠트릴 수 있는 요소가 될 수 있는 지점을 sp.. 더보기
Apache HTTP 구동시 Cannot load modules/mod_ssl.so into server: libssl.so.1.0.0: cannot open shared object file https://springboot.cloud/21 에서는 컴파일을 통해서 Apache HTTP 웹서버를 설치하는 방법을 알아보았다. 이전 게시물에서 OpenSSL 을 빌드할 때 아래와 같이 빌드했었다. ./config --prefix=/tmp/apache-install/openssl-for-httpd -fPIC shared make make install 맨 뒤에 -fPIC shared 옵션이 붙은 것을 볼 수 있다. -fPIC 옵션은 OpenSSL이 위치독립코드(position independent code)로 동작하도록 빌드한다는 것이고 shared 옵션은 OpenSSL이 shared object에 의존성을 가지도록 빌드한다는 것이다. PIC에 대해서는 https://ko.wikipedia.org/w.. 더보기
Apache httpd 를 컴파일로 설치하기 웹서버를 운영하다보면 주기적으로 웹서버나 WAS 등의 보안 취약점 패치 권고가 날아온다. 그러면 작업 계획을 세우고 버전업을 해야하는데, 아무래도 운영 서버들은 망분리가 되어 있는 경우가 많아서 직접 컴파일을 해서 설치해야 하는 경우가 있다. 아파치 웹서버도 그 중 하나인데, 아파치 웹서버 2.2 에서 2.4로 버전업을 할 때 바뀐 설정값을 일일이 체크하지 못 해서 힘들었던 경험도 있고해서 아파치 웹서버는 개인적으로 좀 아픈 손가락이다. 이번에도 아파치 2.4.38 까지 보안 취약점이 발견되었다고 해서 2.4.39 로 패치를 조만간 할 계획을 잡아놨는데 간만에 연습도 하고 준비도 해 둘겸 Apache httpd를 컴파일로 설치하는 법을 정리 해 보려 한다. 5G가 개통하고 초연결 시대가 왔다는데 인터넷 .. 더보기
ElasticSearch Heap 사이즈 설정 지난 주는 대용량 데이터를 kafka를 통해 vertica 및 elasticsearch 에 적재하면서 최적의 설정을 하기 위해 몇십 기가씩 쏴보고 heap 사이즈 부족하다고 터지면 설정 조절하고 그런 것의 연속이었다. ElasticSearch 관련해서 설정을 조정하면서 레퍼런스 문서에서 참고한 부분들을 살펴 보려한다. 아마도 JVM 기반의 애플리케이션의 Heap 사이즈를 설정하면서 여러 군데 사용할 수 있는 지식이기도 할 듯 해서 정리 해 둠. - 배경 지식Oracle Java Virtual Machine Specification (https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html)에 따르면 JVM은 프로그램 실행시 런타임에서 사용하는 다양한.. 더보기