jetstream-api 0.7.0__tar.gz → 0.7.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/PKG-INFO +14 -2
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/README.md +13 -1
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/ilink/__init__.py +1 -1
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/ilink/producer.py +50 -27
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/ilink/qmgr.py +6 -3
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/jetstream_api.egg-info/PKG-INFO +14 -2
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/pyproject.toml +1 -1
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/LICENSE.txt +0 -0
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/ilink/admin.py +0 -0
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/ilink/admintopic.py +0 -0
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/ilink/common.py +0 -0
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/ilink/connectivity.py +0 -0
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/ilink/exception.py +0 -0
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/ilink/msg.py +0 -0
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/ilink/partitioner.py +0 -0
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/ilink/pattern.py +0 -0
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/ilink/properties.py +0 -0
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/ilink/py.typed +0 -0
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/ilink/topic.py +0 -0
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/ilink/util.py +0 -0
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/jetstream_api.egg-info/SOURCES.txt +0 -0
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/jetstream_api.egg-info/dependency_links.txt +0 -0
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/jetstream_api.egg-info/requires.txt +0 -0
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/jetstream_api.egg-info/top_level.txt +0 -0
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/setup.cfg +0 -0
- {jetstream_api-0.7.0 → jetstream_api-0.7.1}/tests/test_example.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: jetstream-api
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.1
|
|
4
4
|
Summary: Python client API for iLink M.O.M. (Message Oriented Middleware)
|
|
5
5
|
Author: snowjeans
|
|
6
6
|
License: Boost Software License - Version 1.0 - August 17th, 2003
|
|
@@ -54,6 +54,17 @@ Python으로 작성된 ILink 클라이언트 API입니다.
|
|
|
54
54
|
## 설치 방법
|
|
55
55
|
pip install jetstream-api
|
|
56
56
|
|
|
57
|
+
## 0.7.1 변경 - producer 기본값: 멱등 켜짐, batchSize 16384 (자바 v2.3.1 과 같음)
|
|
58
|
+
|
|
59
|
+
- `enableIdempotence` 기본값이 **켜짐**입니다. 멱등을 직접 정하지 않았으면 `acks(0)` 이나 `maxInFlight` 가 5 를 넘을 때
|
|
60
|
+
멱등이 저절로 꺼집니다. `enableIdempotence(True)` 를 명시하고 그 둘과 함께 쓰면 전처럼 생성 때 `ValueError` 입니다.
|
|
61
|
+
- 멱등이면 토픽을 비우거나(FLUSH) epoch 가 바뀐 순간 걸려 있던 배치를 다시 보내지 않고 실패로 올립니다
|
|
62
|
+
(`MIMQE_TOPIC_FLUSHED` / `MIMQE_TOPIC_EPOCH_MISMATCH`). 0.7.0 기본처럼 조용히 다시 보내려면 `enableIdempotence(False)` 를
|
|
63
|
+
명시하십시오.
|
|
64
|
+
- `batchSize` 기본값이 **16384** 입니다(파티션 배치 하나의 상한). 0.7.0 은 262144 였습니다 - 처리량이 모자라면
|
|
65
|
+
`batchSize(262144)` 처럼 늘리십시오.
|
|
66
|
+
- producer 수 안내: 한 토픽의 producer(연결)는 1~4개면 충분합니다(엔진 7.0.1.3407 실측).
|
|
67
|
+
|
|
57
68
|
## 0.7.0 변경 - 발행 v2: producer 하나 = 토픽 하나, 파티션별 배치, 봉투 겹쳐 보내기 (엔진 v2 필요)
|
|
58
69
|
|
|
59
70
|
발행 경로를 엔진의 새 발행 형식(v2)으로 바꿨습니다. **엔진도 v2 판이어야 합니다** - 옛 엔진에는 발행이 되지 않고
|
|
@@ -61,7 +72,8 @@ pip install jetstream-api
|
|
|
61
72
|
|
|
62
73
|
- **producer 하나 = 토픽 하나 = 연결 하나.** `qmgr.create_producer("ORDER.EVENT", config)` 로 만듭니다. 생성할 때 토픽의
|
|
63
74
|
파티션 수를 받아 두므로 없는 토픽이면 생성 단계에서 `MIMQE_OBJECT_NOT_FOUND` 로 실패합니다. 토픽이 여러 개면 토픽마다
|
|
64
|
-
producer 를
|
|
75
|
+
producer 를 만듭니다. 한 토픽의 producer(연결)는 1~4개면 충분합니다 - 엔진 7.0.1.3407 실측에서 8개로 늘리면 어느 크기든
|
|
76
|
+
오히려 줄었습니다. 큰 레코드(1KB 급)는 1개로도 디스크가 먼저 한계에 닿고, 작은 레코드(100B 급)는 4개 근처가 최대입니다.
|
|
65
77
|
- 레코드 토픽이 producer 토픽과 다르면 `send()` 가 `MIMQE_INVALID_ARGUMENT` 로 거부합니다.
|
|
66
78
|
- 옛 `create_producer(config)` / `ILTopicProducer(host, port, name, config)` 모양으로 부르면 `TypeError` 가 납니다.
|
|
67
79
|
- 배치는 **파티션마다** 모입니다. `batchSize`(기본 **262144**, 자바와 같음)는 파티션 배치 하나의 상한입니다. 보낼 때는
|
|
@@ -8,6 +8,17 @@ Python으로 작성된 ILink 클라이언트 API입니다.
|
|
|
8
8
|
## 설치 방법
|
|
9
9
|
pip install jetstream-api
|
|
10
10
|
|
|
11
|
+
## 0.7.1 변경 - producer 기본값: 멱등 켜짐, batchSize 16384 (자바 v2.3.1 과 같음)
|
|
12
|
+
|
|
13
|
+
- `enableIdempotence` 기본값이 **켜짐**입니다. 멱등을 직접 정하지 않았으면 `acks(0)` 이나 `maxInFlight` 가 5 를 넘을 때
|
|
14
|
+
멱등이 저절로 꺼집니다. `enableIdempotence(True)` 를 명시하고 그 둘과 함께 쓰면 전처럼 생성 때 `ValueError` 입니다.
|
|
15
|
+
- 멱등이면 토픽을 비우거나(FLUSH) epoch 가 바뀐 순간 걸려 있던 배치를 다시 보내지 않고 실패로 올립니다
|
|
16
|
+
(`MIMQE_TOPIC_FLUSHED` / `MIMQE_TOPIC_EPOCH_MISMATCH`). 0.7.0 기본처럼 조용히 다시 보내려면 `enableIdempotence(False)` 를
|
|
17
|
+
명시하십시오.
|
|
18
|
+
- `batchSize` 기본값이 **16384** 입니다(파티션 배치 하나의 상한). 0.7.0 은 262144 였습니다 - 처리량이 모자라면
|
|
19
|
+
`batchSize(262144)` 처럼 늘리십시오.
|
|
20
|
+
- producer 수 안내: 한 토픽의 producer(연결)는 1~4개면 충분합니다(엔진 7.0.1.3407 실측).
|
|
21
|
+
|
|
11
22
|
## 0.7.0 변경 - 발행 v2: producer 하나 = 토픽 하나, 파티션별 배치, 봉투 겹쳐 보내기 (엔진 v2 필요)
|
|
12
23
|
|
|
13
24
|
발행 경로를 엔진의 새 발행 형식(v2)으로 바꿨습니다. **엔진도 v2 판이어야 합니다** - 옛 엔진에는 발행이 되지 않고
|
|
@@ -15,7 +26,8 @@ pip install jetstream-api
|
|
|
15
26
|
|
|
16
27
|
- **producer 하나 = 토픽 하나 = 연결 하나.** `qmgr.create_producer("ORDER.EVENT", config)` 로 만듭니다. 생성할 때 토픽의
|
|
17
28
|
파티션 수를 받아 두므로 없는 토픽이면 생성 단계에서 `MIMQE_OBJECT_NOT_FOUND` 로 실패합니다. 토픽이 여러 개면 토픽마다
|
|
18
|
-
producer 를
|
|
29
|
+
producer 를 만듭니다. 한 토픽의 producer(연결)는 1~4개면 충분합니다 - 엔진 7.0.1.3407 실측에서 8개로 늘리면 어느 크기든
|
|
30
|
+
오히려 줄었습니다. 큰 레코드(1KB 급)는 1개로도 디스크가 먼저 한계에 닿고, 작은 레코드(100B 급)는 4개 근처가 최대입니다.
|
|
19
31
|
- 레코드 토픽이 producer 토픽과 다르면 `send()` 가 `MIMQE_INVALID_ARGUMENT` 로 거부합니다.
|
|
20
32
|
- 옛 `create_producer(config)` / `ILTopicProducer(host, port, name, config)` 모양으로 부르면 `TypeError` 가 납니다.
|
|
21
33
|
- 배치는 **파티션마다** 모입니다. `batchSize`(기본 **262144**, 자바와 같음)는 파티션 배치 하나의 상한입니다. 보낼 때는
|
|
@@ -58,8 +58,9 @@ class ILProducerConfig:
|
|
|
58
58
|
self._acks = 1
|
|
59
59
|
#: 배치를 모으는 시간(ms). 0 이면 모이는 대로 즉시 보낸다
|
|
60
60
|
self._lingerMs = 0
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
# 0.7.1: Kafka batch.size 와 같은 16384(사용자 결정 2026-09-13). 0.7.0 은 262144 였다
|
|
62
|
+
#: 파티션 배치 하나의 크기 상한(바이트). 기본 16384
|
|
63
|
+
self._batchSize = 16384
|
|
63
64
|
#: 동시에 ACK 를 기다릴 봉투 수 상한
|
|
64
65
|
self._maxInFlight = 5
|
|
65
66
|
#: 연결 실패 시 재시도 횟수
|
|
@@ -78,14 +79,20 @@ class ILProducerConfig:
|
|
|
78
79
|
self._maxRequestSize = 1048576
|
|
79
80
|
#: 접속한 큐관리자가 받는 프레임 길이 상한(바이트) - 엔진 Runtime@MaxFrameLength 기본 128MiB
|
|
80
81
|
self._maxFrameLength = ILC.MIMQ_DEFAULT_MAX_FRAME_LENGTH
|
|
81
|
-
|
|
82
|
-
|
|
82
|
+
# 0.7.1: Kafka 3.x 와 같은 기본 켜짐(사용자 결정 2026-09-13)
|
|
83
|
+
#: 멱등 발행(PID 발급 + 시퀀스). 재전송 시 중복 적재를 막는다. 기본 켜짐
|
|
84
|
+
self._enableIdempotence = True
|
|
85
|
+
#: 멱등을 사용자가 정했는지. 정하지 않았으면 acks=0 이나 maxInFlight > 5 에서 저절로 꺼진다
|
|
86
|
+
self._idempotenceSet = False
|
|
83
87
|
|
|
84
88
|
def __setattr__(self, name: str, value) -> None:
|
|
85
89
|
# 구버전 호환: cfg.acks = 0 / cfg.lingerMs = 5 같은 직접 대입을 내부 슬롯으로 돌린다.
|
|
86
90
|
# (예전 이름 idempotent 도 함께 받아 준다)
|
|
87
91
|
if name == "idempotent":
|
|
88
92
|
name = "enableIdempotence"
|
|
93
|
+
if name == "enableIdempotence":
|
|
94
|
+
# 직접 대입도 사용자가 정한 것이다 - 기본 멱등의 저절로 끄기를 적용하지 않는다
|
|
95
|
+
object.__setattr__(self, "_idempotenceSet", True)
|
|
89
96
|
if name in self._OPTIONS:
|
|
90
97
|
name = "_" + name
|
|
91
98
|
object.__setattr__(self, name, value)
|
|
@@ -104,7 +111,8 @@ class ILProducerConfig:
|
|
|
104
111
|
ILProducerConfig: 체이닝을 위해 자기 자신.
|
|
105
112
|
|
|
106
113
|
Note:
|
|
107
|
-
``acks=0`` 은
|
|
114
|
+
멱등(기본 켜짐)을 정하지 않았으면 ``acks=0`` 은 멱등을 끈다. ``enableIdempotence(True)`` 를
|
|
115
|
+
명시하고 ``acks=0`` 이면 :meth:`validate` 가 거부한다.
|
|
108
116
|
"""
|
|
109
117
|
self._acks = 0 if n == 0 else 1; return self
|
|
110
118
|
|
|
@@ -127,7 +135,7 @@ class ILProducerConfig:
|
|
|
127
135
|
self._lingerMs = max(0, n); return self
|
|
128
136
|
|
|
129
137
|
def batchSize(self, n: int) -> "ILProducerConfig":
|
|
130
|
-
"""파티션 배치 하나의 크기 상한(바이트)을 정한다. (기본
|
|
138
|
+
"""파티션 배치 하나의 크기 상한(바이트)을 정한다. (기본 16384 = 16KB)
|
|
131
139
|
|
|
132
140
|
Args:
|
|
133
141
|
n (int): 상한(**바이트**). 배치는 파티션마다 따로 모인다. 레코드를 붙이면 이 값을
|
|
@@ -137,7 +145,7 @@ class ILProducerConfig:
|
|
|
137
145
|
ILProducerConfig: 체이닝을 위해 자기 자신.
|
|
138
146
|
|
|
139
147
|
Note:
|
|
140
|
-
뜻과 기본값이 Java 클라이언트와 같다(0.7.0).
|
|
148
|
+
뜻과 기본값이 Java 클라이언트와 같다(0.7.1 부터 16384. 0.7.0 은 262144 였다 - 처리량이 모자라면 늘린다).
|
|
141
149
|
``lingerMs`` 가 0 이면 자르는 크기로만 쓰이고(배치는 보낼 수 있게 되는 즉시 나간다),
|
|
142
150
|
``lingerMs`` 가 0 보다 크면 전송 조건도 된다(이만큼 차거나 lingerMs 가 지나면 보낸다).
|
|
143
151
|
레코드 하나가 이 값보다 크면 그 레코드 혼자 배치 하나가 된다. 보낼 때는 준비된
|
|
@@ -156,9 +164,9 @@ class ILProducerConfig:
|
|
|
156
164
|
|
|
157
165
|
Note:
|
|
158
166
|
I/O 스레드가 봉투를 이만큼 겹쳐 보낸다(0.7.0). 엔진은 한 연결의 봉투를 겹쳐
|
|
159
|
-
처리하고 응답은 요청 순서대로 온다.
|
|
160
|
-
엔진이 파티션마다 최근 배치 5개로 중복을 가리기
|
|
161
|
-
``ValueError
|
|
167
|
+
처리하고 응답은 요청 순서대로 온다. **멱등(기본 켜짐)은 5 이하에서만 쓰인다** -
|
|
168
|
+
엔진이 파티션마다 최근 배치 5개로 중복을 가리기 때문이다. 멱등을 정하지 않았으면 5 를 넘길 때
|
|
169
|
+
멱등이 꺼지고, ``enableIdempotence(True)`` 를 명시했으면 :meth:`validate` 가 ``ValueError``.
|
|
162
170
|
"""
|
|
163
171
|
self._maxInFlight = max(1, n); return self
|
|
164
172
|
|
|
@@ -310,23 +318,33 @@ class ILProducerConfig:
|
|
|
310
318
|
return self
|
|
311
319
|
|
|
312
320
|
def enableIdempotence(self, b: bool) -> "ILProducerConfig":
|
|
313
|
-
"""멱등 발행(중복 제거)을
|
|
321
|
+
"""멱등 발행(중복 제거)을 켜거나 끈다. (기본 켜짐 - 0.7.1)
|
|
314
322
|
|
|
315
323
|
켜면 접속 시 서버에서 PID 를 발급받아 파티션 배치마다 (PID, baseSeq) 를 실어 보낸다.
|
|
316
324
|
재시도로 같은 배치가 두 번 도착해도 서버가 시퀀스로 걸러 **한 번만 적재한다.**
|
|
317
325
|
``maxInFlight`` 는 5 이하여야 한다.
|
|
318
326
|
|
|
327
|
+
이 메서드로 정하지 않으면 ``acks=0`` 이거나 ``maxInFlight`` 가 5 를 넘을 때 멱등이 저절로 꺼진다.
|
|
328
|
+
명시적으로 켜고 그 둘과 함께 쓰면 :meth:`validate` 가 거부한다.
|
|
329
|
+
|
|
330
|
+
멱등이면 토픽 FLUSH / epoch 변경으로 거절된 배치(``MIMQE_TOPIC_FLUSHED`` /
|
|
331
|
+
``MIMQE_TOPIC_EPOCH_MISMATCH``)를 다시 보내지 않고 실패로 올린다 - 엔진이 그 토픽의 번호 상태를
|
|
332
|
+
새로 잡으므로 다시 보낸 배치가 중복으로 가려져 사라질 수 있기 때문이다. 비멱등(False)은 메타데이터를
|
|
333
|
+
다시 받고 조용히 다시 보낸다.
|
|
334
|
+
|
|
319
335
|
Args:
|
|
320
|
-
b (bool): True 면 멱등
|
|
336
|
+
b (bool): True 면 멱등 발행, False 면 비멱등.
|
|
321
337
|
|
|
322
338
|
Returns:
|
|
323
339
|
ILProducerConfig: 체이닝을 위해 자기 자신.
|
|
324
340
|
|
|
325
341
|
Raises:
|
|
326
|
-
ValueError: (:meth:`validate` 시점) ``acks=0``
|
|
342
|
+
ValueError: (:meth:`validate` 시점) 명시적으로 켜고 ``acks=0`` 이나 ``maxInFlight`` > 5 와 함께 썼을 때.
|
|
327
343
|
응답을 받지 않는 모드에서는 중복 제거가 성립하지 않는다.
|
|
328
344
|
"""
|
|
329
|
-
self._enableIdempotence = bool(b)
|
|
345
|
+
self._enableIdempotence = bool(b)
|
|
346
|
+
self._idempotenceSet = True
|
|
347
|
+
return self
|
|
330
348
|
|
|
331
349
|
# ── 빌더 (snake 별칭) ───────────────────────────────────────────────
|
|
332
350
|
# Java 이름 빌더와 동작이 같다. 상세 설명은 각 원본 메서드를 참조.
|
|
@@ -404,18 +422,18 @@ class ILProducerConfig:
|
|
|
404
422
|
return self._lingerMs
|
|
405
423
|
|
|
406
424
|
def get_batch_size(self) -> int:
|
|
407
|
-
"""
|
|
425
|
+
"""파티션 배치 하나의 크기 상한(바이트). 기본 16384.
|
|
408
426
|
|
|
409
427
|
Returns:
|
|
410
|
-
int:
|
|
428
|
+
int: 파티션 배치 하나의 크기 상한(바이트). 기본 16384.
|
|
411
429
|
"""
|
|
412
430
|
return self._batchSize
|
|
413
431
|
|
|
414
432
|
def get_max_in_flight(self) -> int:
|
|
415
|
-
"""
|
|
433
|
+
"""응답을 기다리는 봉투 수의 상한. 기본 5.
|
|
416
434
|
|
|
417
435
|
Returns:
|
|
418
|
-
int:
|
|
436
|
+
int: 응답을 기다리는 봉투 수의 상한. 기본 5.
|
|
419
437
|
"""
|
|
420
438
|
return self._maxInFlight
|
|
421
439
|
|
|
@@ -484,12 +502,15 @@ class ILProducerConfig:
|
|
|
484
502
|
return self._maxFrameLength
|
|
485
503
|
|
|
486
504
|
def is_idempotence_enabled(self) -> bool:
|
|
487
|
-
"""멱등
|
|
505
|
+
"""실제로 쓰일 멱등 발행 여부. 기본 True.
|
|
488
506
|
|
|
489
507
|
Returns:
|
|
490
|
-
bool: 멱등
|
|
508
|
+
bool: 멱등 발행 여부. 정하지 않았으면 기본(True)이되, ``acks=0`` 이거나 ``maxInFlight`` 가
|
|
509
|
+
5 를 넘으면 False 다.
|
|
491
510
|
"""
|
|
492
|
-
|
|
511
|
+
if self._idempotenceSet:
|
|
512
|
+
return self._enableIdempotence
|
|
513
|
+
return self._acks != 0 and self._maxInFlight <= 5
|
|
493
514
|
|
|
494
515
|
getAcks = get_acks
|
|
495
516
|
getLingerMs = get_linger_ms
|
|
@@ -507,12 +528,13 @@ class ILProducerConfig:
|
|
|
507
528
|
|
|
508
529
|
def validate(self) -> None:
|
|
509
530
|
"""조합 검증. producer 생성 시 호출된다."""
|
|
510
|
-
|
|
531
|
+
# 0.7.1: 명시적으로 켰을 때만 막는다. 정하지 않은 기본 멱등은 is_idempotence_enabled() 에서 저절로 꺼진다
|
|
532
|
+
if self._idempotenceSet and self._enableIdempotence and self._acks == 0:
|
|
511
533
|
raise ValueError(
|
|
512
534
|
"enableIdempotence requires acks=1"
|
|
513
535
|
)
|
|
514
536
|
# 0.7.0: 엔진은 (pid, 파티션)마다 최근 배치 5개로 중복을 가린다 - 그보다 많이 겹쳐 보내면 재전송이 중복으로 가려지지 않는다
|
|
515
|
-
if self._enableIdempotence and self._maxInFlight > 5:
|
|
537
|
+
if self._idempotenceSet and self._enableIdempotence and self._maxInFlight > 5:
|
|
516
538
|
raise ValueError(
|
|
517
539
|
"enableIdempotence requires maxInFlight <= 5 (the engine remembers the last 5 batches"
|
|
518
540
|
" per partition; Kafka has the same limit)"
|
|
@@ -1001,8 +1023,9 @@ class ILTopicProducer:
|
|
|
1001
1023
|
"""토픽 하나에 묶인 발행자. ``ILQmgr.create_producer(topic, config)`` 로 얻는다. (0.7.0 발행 v2)
|
|
1002
1024
|
|
|
1003
1025
|
producer 하나 = 토픽 하나 = 전용 연결 하나(clientName + ``"-PRD"``) + I/O 스레드 하나다. 생성할 때
|
|
1004
|
-
연결을 열고 토픽의 파티션 수·epoch·세그먼트 크기를 받아 둔다.
|
|
1005
|
-
|
|
1026
|
+
연결을 열고 토픽의 파티션 수·epoch·세그먼트 크기를 받아 둔다. 한 토픽의 producer(연결)는 1~4개면
|
|
1027
|
+
충분하다 - 엔진 7.0.1.3407 실측에서 8개로 늘리면 어느 크기든 오히려 줄었다. 큰 레코드(1KB 급)는 1개로도
|
|
1028
|
+
디스크가 먼저 한계에 닿고, 작은 레코드(100B 급)는 4개 근처가 최대다.
|
|
1006
1029
|
|
|
1007
1030
|
보장:
|
|
1008
1031
|
|
|
@@ -1041,8 +1064,8 @@ class ILTopicProducer:
|
|
|
1041
1064
|
Raises:
|
|
1042
1065
|
TypeError: ``topic`` 이 토픽 이름(str)이 아닐 때 - 0.6.x 의
|
|
1043
1066
|
``ILTopicProducer(host, port, name, config)`` 모양으로 부르면 여기서 멈춘다.
|
|
1044
|
-
ValueError: ``topic`` 이 비었거나 ``config`` 조합이 잘못됐을 때(멱등 + ``acks=0``,
|
|
1045
|
-
멱등 + ``maxInFlight`` > 5).
|
|
1067
|
+
ValueError: ``topic`` 이 비었거나 ``config`` 조합이 잘못됐을 때(명시적으로 켠 멱등 + ``acks=0``,
|
|
1068
|
+
명시적으로 켠 멱등 + ``maxInFlight`` > 5).
|
|
1046
1069
|
ILOperationException: 주소 목록이 비었거나, 접속·토픽 조회를 거절당했을 때
|
|
1047
1070
|
(없는 토픽이면 ``MIMQE_OBJECT_NOT_FOUND``).
|
|
1048
1071
|
ILException: 후보 주소 어디에도 접속하지 못했을 때.
|
|
@@ -1139,7 +1139,7 @@ class ILQmgr:
|
|
|
1139
1139
|
Args:
|
|
1140
1140
|
topic (str): 발행할 토픽 이름. 이 producer 는 이 토픽에만 발행한다.
|
|
1141
1141
|
config (ILProducerConfig | None): 발행 설정. 기본 None 이면 전 항목
|
|
1142
|
-
기본값(acks=1 / linger 0 / batch
|
|
1142
|
+
기본값(acks=1 / linger 0 / batch 16KB / maxInFlight 5 / 멱등 켜짐).
|
|
1143
1143
|
|
|
1144
1144
|
Returns:
|
|
1145
1145
|
ILTopicProducer: 발행자. 다 쓰면 ``close()`` 로 닫는다.
|
|
@@ -1149,13 +1149,16 @@ class ILQmgr:
|
|
|
1149
1149
|
부르면 여기서 멈춘다.
|
|
1150
1150
|
ILOperationException: 아직 :meth:`connect` 하지 않았을 때, 없는 토픽일 때
|
|
1151
1151
|
(``MIMQE_OBJECT_NOT_FOUND``).
|
|
1152
|
-
ValueError: ``config`` 조합이 잘못됐을 때(멱등 + ``acks=0``, 멱등 +
|
|
1152
|
+
ValueError: ``config`` 조합이 잘못됐을 때(명시적으로 켠 멱등 + ``acks=0``, 명시적으로 켠 멱등 +
|
|
1153
|
+
``maxInFlight`` > 5).
|
|
1153
1154
|
ILException: 발행 전용 연결을 맺지 못했을 때.
|
|
1154
1155
|
|
|
1155
1156
|
Note:
|
|
1156
1157
|
발행자는 **전용 연결**을 하나 연다(클라이언트 이름 뒤에 ``"-PRD"`` 가 붙는다). 생성할 때 토픽의
|
|
1157
1158
|
파티션 수를 받아 두고, I/O 스레드가 봉투를 겹쳐 보낸다. 토픽이 여러 개면 토픽마다 producer 를
|
|
1158
|
-
|
|
1159
|
+
만든다. 한 토픽의 producer 는 1~4개면 충분하다 - 엔진 7.0.1.3407 실측에서 8개로 늘리면 어느 크기든
|
|
1160
|
+
오히려 줄었다. 큰 레코드(1KB 급)는 1개로도 디스크가 먼저 한계에 닿고, 작은 레코드(100B 급)는 4개
|
|
1161
|
+
근처가 최대다.
|
|
1159
1162
|
|
|
1160
1163
|
Example::
|
|
1161
1164
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: jetstream-api
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.1
|
|
4
4
|
Summary: Python client API for iLink M.O.M. (Message Oriented Middleware)
|
|
5
5
|
Author: snowjeans
|
|
6
6
|
License: Boost Software License - Version 1.0 - August 17th, 2003
|
|
@@ -54,6 +54,17 @@ Python으로 작성된 ILink 클라이언트 API입니다.
|
|
|
54
54
|
## 설치 방법
|
|
55
55
|
pip install jetstream-api
|
|
56
56
|
|
|
57
|
+
## 0.7.1 변경 - producer 기본값: 멱등 켜짐, batchSize 16384 (자바 v2.3.1 과 같음)
|
|
58
|
+
|
|
59
|
+
- `enableIdempotence` 기본값이 **켜짐**입니다. 멱등을 직접 정하지 않았으면 `acks(0)` 이나 `maxInFlight` 가 5 를 넘을 때
|
|
60
|
+
멱등이 저절로 꺼집니다. `enableIdempotence(True)` 를 명시하고 그 둘과 함께 쓰면 전처럼 생성 때 `ValueError` 입니다.
|
|
61
|
+
- 멱등이면 토픽을 비우거나(FLUSH) epoch 가 바뀐 순간 걸려 있던 배치를 다시 보내지 않고 실패로 올립니다
|
|
62
|
+
(`MIMQE_TOPIC_FLUSHED` / `MIMQE_TOPIC_EPOCH_MISMATCH`). 0.7.0 기본처럼 조용히 다시 보내려면 `enableIdempotence(False)` 를
|
|
63
|
+
명시하십시오.
|
|
64
|
+
- `batchSize` 기본값이 **16384** 입니다(파티션 배치 하나의 상한). 0.7.0 은 262144 였습니다 - 처리량이 모자라면
|
|
65
|
+
`batchSize(262144)` 처럼 늘리십시오.
|
|
66
|
+
- producer 수 안내: 한 토픽의 producer(연결)는 1~4개면 충분합니다(엔진 7.0.1.3407 실측).
|
|
67
|
+
|
|
57
68
|
## 0.7.0 변경 - 발행 v2: producer 하나 = 토픽 하나, 파티션별 배치, 봉투 겹쳐 보내기 (엔진 v2 필요)
|
|
58
69
|
|
|
59
70
|
발행 경로를 엔진의 새 발행 형식(v2)으로 바꿨습니다. **엔진도 v2 판이어야 합니다** - 옛 엔진에는 발행이 되지 않고
|
|
@@ -61,7 +72,8 @@ pip install jetstream-api
|
|
|
61
72
|
|
|
62
73
|
- **producer 하나 = 토픽 하나 = 연결 하나.** `qmgr.create_producer("ORDER.EVENT", config)` 로 만듭니다. 생성할 때 토픽의
|
|
63
74
|
파티션 수를 받아 두므로 없는 토픽이면 생성 단계에서 `MIMQE_OBJECT_NOT_FOUND` 로 실패합니다. 토픽이 여러 개면 토픽마다
|
|
64
|
-
producer 를
|
|
75
|
+
producer 를 만듭니다. 한 토픽의 producer(연결)는 1~4개면 충분합니다 - 엔진 7.0.1.3407 실측에서 8개로 늘리면 어느 크기든
|
|
76
|
+
오히려 줄었습니다. 큰 레코드(1KB 급)는 1개로도 디스크가 먼저 한계에 닿고, 작은 레코드(100B 급)는 4개 근처가 최대입니다.
|
|
65
77
|
- 레코드 토픽이 producer 토픽과 다르면 `send()` 가 `MIMQE_INVALID_ARGUMENT` 로 거부합니다.
|
|
66
78
|
- 옛 `create_producer(config)` / `ILTopicProducer(host, port, name, config)` 모양으로 부르면 `TypeError` 가 납니다.
|
|
67
79
|
- 배치는 **파티션마다** 모입니다. `batchSize`(기본 **262144**, 자바와 같음)는 파티션 배치 하나의 상한입니다. 보낼 때는
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|