[컴] kafka connector

카프카 커넥터 / task / 태스크 / 소스 / 싱크 / 상태확인 / 점검 / check

kafka connector

kafka connector 의 task

  • connector 의 task 는 다른 system 으로 data 를 복사하거나 다른 system 에서 data 를 복사해 가져오는 code 를 가지고 있다.
  • Task들은 설정값(configuration) 을 그들의 parent connector 로 부터 받고, Kafka Connect job 의 work 일부를 Task들 에 배정(assign) 한다.
  • Kafka Connect framework 는 Task 로 부터 data 를 가져오거나(pull) Task 에게로 data 를 준다.(push)
  • Task 는 reconfiguration 요청에 대해 응답할 수 있어야만 한다.

kafka connector

kafka connector 는 data 를 kafka topics으로 넣고, kafka topics 에서 data를 다른 외부 system 으로 export 할 수 있도록 해주는 api 를 제공하는 component 이다.

카프카의 Source 와 Sink [ref. 3]

  • Source connector는 (Source Task 들의 도움을 받아) 데이터를 카프카로 가져오는 역할을 한다.
  • Sink Connector 는 (Sink Task 들의 도움을 받아) 카프카에서 데이터를 내보내는 역할을 한다.
  • Sink Connector 는 kafka topic들의 데이터를 2차 인덱스(Elasticsearch 같은)나 ‘batch systmes’(hadoop 같은) 등으로 전송한다.
  • Kafka Connect는 Kafka와 주고받는 스트리밍 데이터에 초점을 맞추므로서 고품질, 신뢰성 및 고성능 connector plugins 를 쉽게 작성할 수 있게 해 준다.

connector status

connector 의 상황을 curl 로 확인할 수 있다.

$ curl localhost:8083/connectors
['xxx-connector']

$ curl localhost:8083/connectors/xxx-connector/status | jq

Reference

  1. https://kafka.apache.org/20/javadoc/org/apache/kafka/connect/connector/Task.html
  2. Introduction to Kafka Connectors | Baeldung
  3. What is a Kafka sink connector?

[컴][db] mongo query - 전체 collection 에서 하나의 doc 을 가져오기

mongo db / mongo database query /

mongodb query

각 collection 에서 마지막 doc 을 가져와서 json 을 형성

// 결과
{
    <collection_name> : <last_doc>,
    "mycoll" : { "adfds": 3, "dfs": 3444, ...},
    ...
}
var i = 0
print("{")
db.getCollectionNames().forEach(function(collname) {
    // find the last item in a collection
    var last_element = db[collname].find().sort({_id:-1}).limit(1);

    last_element.forEach(function(val){
        if(i !== 0)
            print(`,`)
        print(`"${collname}":`)
        printjsononeline(val)
        i++
    })


    // // check that it's not empty
    // if (last_element.hasNext()) {
    //     // print its timestamp
    //     printjson(last_element.next()._id.getTimestamp());
    // }
})
print("}")

Reference

  1. javascript - Loop through all Mongo collections and execute query - Stack Overflow

[컴] aws s3 에서 public access 설정

s3 bucket 의 public access 설정 / 스태틱 / static server로

aws s3 에서 public access 설정

Granting read-only permission to an anonymous user 에서 “static website hosting” 외에는 anonymous access 를 허가(grant) 하지 말라고 한다.

반대로 이야기 하면 static website hosting 을 위해서는 anonymous 에 대한 접근을 허용해야 한다.

그러면 어떻게 하면 될까?

bucket 을 public access 가능하게 하기

  1. bucket 을 만든다.(bucket owner enforced 로 해서 만든다. Object Ownership 에서 ACLs disabled 하면 된다.)

S3의 최신 사용 사례 대부분의 경우 버킷 소유자 시행(bucket owner enforced) 설정을 선택하여 ’ACL을 사용 중지’하고 Bucket Policy 를 사용하여 필요에 따라 계정 외부의 사용자와 데이터를 공유하는 것이 좋다. 이 접근 방식은 권한 관리와 감사(permissions management and auditing)를 단순화한다.

새로 생성된 버킷과 기존 버킷 모두에서 ACL을 사용 중지할 수 있다. 이미 객체가 있는 기존 버킷의 경우 ACL을 사용 중지하면 객체 및 버킷 ACL이 더 이상 액세스 평가(access evaluation)의 일부가 아니며 정책(policy)에 따라 액세스가 부여되거나 거부된다.

기존 버킷의 경우 ACL을 사용 중지한 후 언제든지 다시 사용 설정할 수 있으며 기존 버킷과 객체 ACL이 복원된다..

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicRead",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
            ]
        }
    ]
}

Reference

  1. Bucket policy examples - Amazon Simple Storage Service

[컴][js] nuxtjs 에서 store 값을 모든 page 에서 공유 하기

 

vuex / share on pages / between pages / nuxtjs 에서 state 를 page 간 공유 / 전체 page 에 공유

nuxtjs 에서 store 값을 모든 page 에서 공유 하기

nuxtjs 의 store(Nuxt - Store directory) 는 한 page 내에서 여러 component 간의 state 등을 공유할 때 유용하게 사용할 수 있다. 하지만 reload 를 하게 되면 memory 정보가 다 날라가기 때문에 더이상 값을 유지할 수 없다. 이것은 다른 page 로 넘어갈 때도 마찬가지다.

그래서 페이지가 변해도 값을 유지 시키기 위해 vuex-persistedstate 는 localStorage 를 이용한다.

  • vuex-persistedstate examples: example 에서 확인해 볼 수 있다. 현재 페이지에서 값을 변경하고 reload 를 해봐도 값이 유지되는 것을 확인할 수 있다.

코드(vuex-persistedstate/index.ts) 는 간단하다. store 에 저장할 때 localStorage 에도 같이 저장해주고, 나중에 값을 가져올 때도 localStorage 에서 가져오는 것이다.

function getState(key, storage) {
  const value = storage.getItem(key);
  
  try {
    return (typeof value === "string")
      ? JSON.parse(value) : (typeof value === "object")
      ? value : undefined;
  } catch (err) {}
  
  return undefined;
}

...

function setState(key, state, storage) {
  return storage.setItem(key, JSON.stringify(state));
}

References

  1. GitHub - robinvdvleuten/vuex-persistedstate: 💾 Persist and rehydrate your Vuex state between page reloads.
  2. Nuxt - Store directory

[컴] browser 별 cookie 위치

cookie path / 브라우저 / 브라우져 / 파폭 쿠키 / 쿠키 위치 / 브라우저 쿠키 위치 / 크롬 / 엣지 / 쿠키 위치

  • chrome 의 cookie path : %appdata%..Data
  • firefox cookie path: %appdata%9lr.default-release.sqlite
  • ms edge 의 cookie path: %appdata%..Data

References

  1. Chromium Cookies and Network Data

[컴][사례] 네크워크 부하가 큰 경우 네트워크 대역폭 사용량

network load 가 큰 경우 / 많은 대역폭 / 역대 최고 대역폭 사용량 / 동접 / traffic / 대용량 / 대규모 트래픽 /

네크워크 부하가 큰 사례

로스트아크의 출시로 스팀 다운로드의 대역폭 사용량이 크게 늘었다

  • 대역폭 사용량 : 평균 최대 10Tbps 수준
  • 로스트아크 사전 다운로드가 열리는 2022년 2월8일 : 30Tbps
  • 로스트아크의 사전 플레이가 시작된 9일 : 45.6Tbps

2월 9일 기준

from : https://store.steampowered.com/stats/content/

from : https://steamdb.info/app/1599340/graphs/

2월 13일 기준

from: https://store.steampowered.com/stats/steam-game-and-player-statistics

기타 다른 게임관련 대역폭 사용량

  • 뉴월드의 출시일에 기록: 24.1Tbps
  • 헤일로 인피니트 멀리트플레이어 버전 출시: 대역폭 사용량이 23Tbps 수준

References

  1. 사전플레이 50만 명 몰린 로스트아크, 스팀 서버도 휘청, 2022-02-09

[컴] git extensions vs tortoiseGit

git gui tool / git util  / 유틸

git extensions vs tortoiseGit

git extensions 를 사용 해 보고 있다.

오랫동안 서브로 tortoiseGit 을 썼었는데, stage 로 file 을 얼릴 수 없어서 아쉬웠다. 그래서 찾다가 git extensions을 써보게 됐다.

git extensions 이 tortoiseGit 대비 좋은점

  • git 에 더 맞춰져 있다 : tortoiseGit 은 tortoiseSVN 에서 나온 프러그램이라 그런지 svn 의 메뉴에 맞는 git command 를 넣어놓은 느낌이다. 그에 비해 git extensions 은 대부분의 git gui 들이 보여주는 ui 를 보여준다.
  • stage : tortoiseGit 에서는 stage 상태로 changed file 의 상태를 변경할 수 없다. git extensions 은 가능하다
    • https://stackoverflow.com/questions/14628098/add-command-in-tortoisegit#14628315

tortoiseGit 이 더 좋은 점

  • 메모리를 적게 소모한다: git extensions 은 창하나를 띄워도 30MB 장도의 메모리가 소모된다. 그에비해 tortoiseGit 은 대략 15MB 정도만 소요된다.
  • 반응속도가 더 빠르다.
  • stage 만 쓰지 않는다면 tortoiseGit 이 개인적으로는 더 좋다.