728x90
반응형
Apache Kafka is an open-source distributed event streaming platform used by thousands of companies for high-performance data pipelines, streaming analytics, data integration, and mission-critical applications.

 

kafka는 위에 보는 것과 같이 분산 이벤트 스트리밍 플랫폼이다. 이것이 무엇인고 하니, 보통 microservice architecture에서 각 service가 독립된 처리를 하게 된다. 즉, 클라이언트의 요청이 들어오면 이 요청을 처리하기 위해서 여러 service가 특정 행위를 처리해야 한다. 하지만 이러한 동작이 동기화되어 있다면 모든 서비스가 처리될 때 동안 다른 처리를 하지 못하는 경우가 발생되게 되는데 이러한 처리를 비동기로 할 수 있게 도와주는 플랫폼이라고 보면 된다. 요즘은 메세지 브로커, 메세지 큐 등 다양하게 불려지고 있다. 

 

kafka는 Publish - Subscript 를 기반으로 되어 있다. Publisher를 메세지를 생산하고, Subscriper 는 그 메세지를 소비한다.

 

예를 들어, auth service가 session service에 특정 정보를 저장하고 싶을 때, Publisher : auth - Subscriper : session이 되는 특정 Topic을 생성하고 이 Topic으로 메세지를 보내고, session이 메세지가 가져가서 처리하게 된다. 아주 간단하게 설명한 것이다. 

 

kafka에서는 여러가지 용어가 있다.

  • Producer : those client applications that publish (write) events to Kafka (이벤트, 즉, 메세지를 생산하는 자)
  • Consumer : those that subscribe to (read and process) these events. (이벤트를 소비하는 자)
  • Topic : place which everts are organized and durably stored (이벤트가 관리되고 저장되는 장소, 큐)
  • Partition : Topics are partitioned, meaning a topic is spread over a number of "buckets" located on different Kafka brokers. (Topic은 여러개의 Partition으로 나뉘어져 있고, 이벤트 키에 따라서 저장되는 파티션이 결정된다.)
  • Replication : To make your data fault-tolerant and highly-available, every topic can be replicated, even across geo-regions or datacenters, so that there are always multiple brokers that have a copy of the data just in case things go wrong, you want to do maintenance on the brokers, and so on. (이벤트는 Replication을 가질 수 있다. 다른 지역에 있는 개발환경 또는 Data center등 자연재해로 인해 손실될 수 있는 것을 방지하기 위함이다. - 뭔가 거대하다...)

출처 : https://kafka.apache.org/intro

 

Kafka는 여러가지 API를 가지게 되는데, Admin API, Producer API, Consumer API, and Kafka Streams API 등이 있다. 

이것은 역할에 맞는 API 들이 있는 것이기 때문에 당연해 보인다. (아래는 참고용이다.)

  • The Admin API to manage and inspect topics, brokers, and other Kafka objects.
  • The Producer API to publish (write) a stream of events to one or more Kafka topics.
  • The Consumer API to subscribe to (read) one or more topics and to process the stream of events produced to them.
  • The Kafka Streams API to implement stream processing applications and microservices. It provides higher-level functions to process event streams, including transformations, stateful operations like aggregations and joins, windowing, processing based on event-time, and more. Input is read from one or more topics in order to generate output to one or more topics, effectively transforming the input streams to output streams.
    The Kafka Connect API to build and run reusable data import/export connectors that consume (read) or produce (write) streams of events from and to external systems and applications so they can integrate with Kafka. For example, a connector to a relational database like PostgreSQL might capture every change to a set of tables. However, in practice, you typically don't need to implement your own connectors because the Kafka community already provides hundreds of ready-to-use connectors.

 

앞으로 kafka를 공부해 가면서 나의 서버 개발에 사용을 해보고자 한다. 이론적인 부분이 추가될 수도 있고 실용적인 코드 위주로만 추가될 수도 있을 것 같다. 아마 내가 기억해야하는 부분이 주로 추가되지 않을까 싶다. 

 

그럼 여기서 이만, 뿅!

728x90
반응형
728x90
반응형

개발 블로그를 시작한 후에 제가 개인적으로 진행중인 프로젝트에 대해서 우선 설명을 해야할 것 같아서 이 글을 쓰게 되었다. 

 

우선, 난 펌웨어 개발을 오래동안 하다가 Software Quality Engineer로 오랫동안 일을 하였기 때문에, 프론트엔드 및 백엔드의 개발 경험이 적은 편이었다. 밴쿠버로 넘어 온 후 프리랜서로 몇 달 일을 하였는데, 그때 사용한 기술을 가지고 경험을 더 확장을 하면 좋을 것 같아서 개인 프로젝트를 시작하게 되었다. 

 

간단하게 설명하면 Spring boot framework을 활용하여 범용 기능을 가진 microservice 기반의 서버를 만드는 것이다. 

현재까지의 구성은 간단하다. 

 

기본 Webserver가 가지는 auth 와 session 정보를 관리하는 서비스, 그리고 Client 쪽으로 data를 보낼 수 있는 push service을 개발하는 것이다. 각 서비스간의 통신은 Kafka를 이용하여 Message를 전달하여 비동기로 처리를 할 예정이다. 이건 뭐 계획이니 어떻게 변경될지는 모르겠지만 변경이 되면 중간중간 공유를 할 예정이다. 

 

그리고, 개발을 진행하면서 CI/CD 환경도 구성을 할 예정이다. 현재 Repository는 Github을 사용하고 있기 때문에 Github과 Jenkins를 이용할 예정이다. 기회가 된다면 CircleCI도 한번 셋팅을 해보고 싶다. 

 

테스트 환경은 Local에 Kubernetes 를 설치하고, Helm chart를 통해서 서비스를 배포할 예정이다. 배포의 경우 요즘 유행하는 GitOps를 이용하여 진행한다. ArgoCD라는 좋은 Tool이 있어서 이를 활용하여 배포를 할 예정이다. 배포에 대한 그림은 대충 이러한 느낌이다. 

 

이 환경은 모두 내가 사용하고 있는 Laptop에 설치할 예정이다. 

Cloud나 별도의 node가 여러 개 많은 환경이 아니기 때문에 완벽한 셋팅은 할 수 없겠지만 1인 개발 환경으로는 충분하지 않을까 생각한다. 

 

지금은 만학도로 밴쿠버에서 컬리지 수업을 받아야 하는 입장이라 많은 시간이 나진 않을 것 같지만 그래도 열심히 해보고자 한다. 

 

728x90
반응형

'개인 프로젝트' 카테고리의 다른 글

개발 블로그의 시작  (0) 2022.01.09
728x90
반응형

안녕하세요. cool입니다. (coolexplorer라는 이름이 길어서 cool이라고 하겠습니다.)

 

이 블로그를 제가 개인적으로 프로젝트를 시작하면서 제 랩탑에 개발환경 및 테스트 환경을 꾸미게 되었는데 이러한 과정을 공유하고 블로그로 남겨두면 History 정리에도 좋을 것 같아서 시작하게 되었습니다. 

 

제 개인적으로 남기는 블로그다 보니 편하게 쓰여지는 글이 많을 것 같습니다. 

 

여러가지 개발환경 구성 및 제가 구글링해서 찾아봐야만 했던 것들을 하나씩 넣어보도록 하겠습니다. 

누군가에게 도움이 되었으면...

 

그럼 시작!

728x90
반응형

'개인 프로젝트' 카테고리의 다른 글

현재 진행 중인 개인 프로젝트 - v0  (0) 2022.01.09

+ Recent posts