2016-07-23 13 views
6

Điểm kiểm tra và trang trí liên quan đến thư viện AWS KCL như thế nào?Điểm kiểm soát Amazon KCL và Trim Horizon

Các trang tài liệu Xử lý Startup, Shutdown, và tốc độ nhâp nói:

Theo mặc định, KCL bắt đầu đọc bản ghi từ đỉnh của dòng ;, đó là kỷ lục được thêm gần đây nhất. Trong cấu hình này, nếu ứng dụng tạo dữ liệu thêm bản ghi vào luồng trước khi bất kỳ bộ xử lý ghi nào đang chạy, các bản ghi không được bộ xử lý ghi đọc sau khi chúng khởi động.

Để thay đổi hành vi của các bộ vi xử lý kỷ lục để nó luôn đọc dữ liệu từ đầu dòng, thiết lập giá trị sau trong các thuộc tính tập tin cho các ứng dụng Amazon Kinesis Streams của bạn:

initialPositionInStream = TRIM_HORIZON

Tài liệu trang Phát triển một Amazon Kinesis Thư viện khách tiêu dùng trong Java nói:

Các luồng yêu cầu bộ xử lý bản ghi để theo dõi các bản ghi đã được xử lý trong phân đoạn. KCL sẽ chăm sóc theo dõi này cho bạn bằng cách chuyển một máy kiểm tra (IRecordProcessorCheckpointer) tới processRecords. Bộ xử lý bản ghi gọi phương thức trạm kiểm soát trên giao diện này để thông báo cho KCL về cách đến nay nó đã tiến triển trong việc xử lý các bản ghi trong phân đoạn. Trong sự kiện mà nhân viên thất bại, KCL sử dụng thông tin này để khởi động lại việc xử lý phân đoạn tại hồ sơ được xử lý cuối cùng đã biết.

Trang đầu tiên dường như để nói rằng KCL sơ yếu lý lịch ở mũi của con suối, trang thứ hai tại kỷ lục cuối cùng xử lý được biết đến (đã được đánh dấu là xử lý bởi các RecordProcessor sử dụng checkpointer). Trong trường hợp của tôi, tôi chắc chắn cần phải khởi động lại ở bản ghi được xử lý cuối cùng đã biết. Tôi có cần đặt initialPositionInStream thành TRIM_HORIZON không?

Trả lời

7

Với luồng kinesis bạn có hai tùy chọn, bạn có thể đọc các bản ghi mới nhất hoặc bắt đầu từ bản ghi cũ nhất (TRIM_HORIZON).

Nhưng, khi bạn khởi động ứng dụng, nó chỉ đọc từ vị trí mà nó đã ngừng sử dụng các điểm kiểm tra của nó. Bạn có thể thấy các điểm kiểm tra đó trong dynamodb (Thường là tên bảng là tên ứng dụng). Vì vậy, nếu bạn khởi động lại ứng dụng của bạn, nó thường sẽ tiếp tục từ nơi nó dừng lại.

Câu trả lời là không, bạn không cần đặt initialPositionInStream thành TRIM_HORIZON.

+2

Cảm ơn bạn, vì vậy trong thực tế, initialPositiionInStream áp dụng để xác định giá trị để bắt đầu nếu không có chekpoint có sẵn? – Edmondo1984

+2

Có, được sử dụng khi KCL của bạn không lưu lại các trạm kiểm soát. –

1

Khi bạn đang đọc các sự kiện từ một dòng suối Kinesis, bạn có 4 lựa chọn:

TRIM_HORIZON - sự kiện lâu đời nhất mà vẫn nằm trong mảnh dòng trước khi chúng được tự động cắt (mặc định 1 ngày, nhưng có thể được mở rộng lên đến 7 ngày).Bạn sẽ sử dụng tùy chọn này nếu bạn muốn bắt đầu một ứng dụng mới sẽ xử lý tất cả các bản ghi có sẵn trong luồng, nhưng sẽ mất một lúc cho đến khi nó có thể bắt kịp và bắt đầu xử lý các sự kiện trong thời gian thực.

MỚI NHẤT - sự kiện mới nhất trong luồng và bỏ qua tất cả các sự kiện trước đây. Bạn sẽ sử dụng tùy chọn này nếu bạn bắt đầu một ứng dụng mới mà bạn muốn xử lý trong thời gian teal ngay lập tức.

AT/AFTER_SEQUENCE_NUMBER - số thứ tự thường là điểm kiểm tra mà bạn đang giữ trong khi bạn đang xử lý các sự kiện. Các trạm kiểm soát này cho phép bạn xử lý sự kiện một cách đáng tin cậy, ngay cả trong trường hợp lỗi trình đọc hoặc khi bạn muốn cập nhật phiên bản của nó và tiếp tục xử lý tất cả các sự kiện và không mất bất kỳ sự kiện nào. Sự khác biệt giữa AT/SAU được dựa trên thời gian của trạm kiểm soát của bạn, trước hoặc sau khi bạn xử lý các sự kiện thành công.

Xin lưu ý rằng đây là chỉ phân đoạn tùy chọn cụ thể, vì tất cả các tùy chọn khác là toàn cầu đối với luồng. Khi bạn đang sử dụng KCL, nó đang quản lý một bảng DynamoDB cho ứng dụng đó với một bản ghi cho mỗi phân đoạn với số thứ tự "hiện tại" cho phân đoạn đó.

AT_TIMESTAMP - thời gian ước tính của sự kiện được đưa vào luồng. Bạn sẽ sử dụng tùy chọn này nếu bạn muốn tìm các sự kiện cụ thể để xử lý dựa trên dấu thời gian của họ. Ví dụ, khi bạn biết rằng bạn có một sự kiện thực tế trong dịch vụ của bạn tại một thời điểm cụ thể, bạn có thể phát triển một ứng dụng sẽ xử lý các sự kiện cụ thể này, ngay cả khi bạn không có số thứ tự.

Xem thêm chi tiết tại Kinesis tài liệu ở đây: https://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html

+0

Tôi hơi bối rối không áp dụng cho truy cập api gốc thay vì sử dụng Kcl? – Edmondo1984

+0

KCL là thư viện đang triển khai API, nó không có quyền kiểm soát nhiều hơn luồng so với những gì bạn có thể nhận trực tiếp thông qua API. KCL đang thêm bên quản lý ứng dụng và chức năng kiểm tra điểm trong DynamoDB, đang sử dụng số thứ tự cho nó. – Guy

0

Bạn nên sử dụng "TRIM_HORIZON". Nó sẽ chỉ có hiệu lực vào lần đầu tiên khi ứng dụng của bạn bắt đầu đọc bản ghi từ luồng. Sau đó, nó sẽ tiếp tục từ vị trí đã biết cuối cùng.

Các vấn đề liên quan