Size: a a a

2020 October 21

GK

Gregory Koshelev in pro.kafka
Долго – это сколько? 10 мс? 100 мс?
источник

D

Dee in pro.kafka
В рэббите например вариант по умолчанию: возвращается ок, если сообщение закинуто в соединение до рэббита. Это происходит за пару мс. Вариант с гарантированной отправкой - надо указывать callback, потому что гарантия - это запись на диск, и рэббит по понятным причинам делает эти записи пачками через значительные промежутки времени, поэтому надо ждать.
Возможно с кафкой похожая схема - иначе говоря при использовании синхронного метода не гарантируется доставка в кластер
Если Кафка подтверждает только после записи на диск, как рэббит, то это может быть довольно долго (200-500 мс)
источник

GK

Gregory Koshelev in pro.kafka
Так время можно тюнить, чтобы был приемлемый p95.
источник

GK

Gregory Koshelev in pro.kafka
источник

D

Dee in pro.kafka
Посмотрю, спасибо.

Но заходя вперед, хотелось бы узнать best practise.
источник

D

Dee in pro.kafka
Делать асинхронно или синхронно вполне пойдет?
источник

D

Dee in pro.kafka
Эмпирически установил, что от запроса до сохранения в кафку и ответа 200 ушло 150мс
источник

GK

Gregory Koshelev in pro.kafka
Dee
Делать асинхронно или синхронно вполне пойдет?
Зависит от задачи. Синхронная запись хороша тем, что пользователь получит 200, если данные точно записались. Соответственно, если делать асинхронно, то придётся дополнительно городить какой-то механизм подтверждения.
источник

GK

Gregory Koshelev in pro.kafka
При этом важно понимать, что синхронно или асинхронно – никак не влияет на end-to-end latency.
источник
2020 October 22

OG

Oleg Gavrilov in pro.kafka
Gregory Koshelev
При этом важно понимать, что синхронно или асинхронно – никак не влияет на end-to-end latency.
По факту то асинхронное подтверждение будет дольше, как мне кажется
источник

OG

Oleg Gavrilov in pro.kafka
Но + что соединение не висит открытым, между продюсером и клиентом, который ждет подтверждения
источник

GK

Gregory Koshelev in pro.kafka
Oleg Gavrilov
Но + что соединение не висит открытым, между продюсером и клиентом, который ждет подтверждения
Если используется какой-нибудь long polling, то тоже самое выйдет.
источник

OG

Oleg Gavrilov in pro.kafka
согласен, но тогда зачем асинхронное подтверждение вообще?
источник

GK

Gregory Koshelev in pro.kafka
Oleg Gavrilov
По факту то асинхронное подтверждение будет дольше, как мне кажется
End-to-end latency от этого не будет зависеть Consumer сможет прочитать данные независио от того, обработал callback Producer или нет (и соответственно, каким образом обработал).
источник

OG

Oleg Gavrilov in pro.kafka
ой сложна
источник

GK

Gregory Koshelev in pro.kafka
Oleg Gavrilov
согласен, но тогда зачем асинхронное подтверждение вообще?
В моей картине мира в этом нет никакой пользы (кроме сценариев fire-and-forget, где подтверждения нет в принципе). На клиенте всегда можно отправлять данные через асинхронный HTTP-клиент и какую угодно логику уже строить вокруг этого.
источник

D

Dee in pro.kafka
Gregory Koshelev
Если используется какой-нибудь long polling, то тоже самое выйдет.
Ну можно вместо полинга замутить сокеты и дергать его, когда будет успех. Клиент при этом может заниматься чем вздумается в ожидании ответа.
источник

D

Dee in pro.kafka
Но ваш посыл ясен.
источник

D

Dee in pro.kafka
Просто на этапе архитектуры хотелось предусмотреть возможность не фризить клиента в ожидании успешной отправки в топик, в случае если Кафка будет недоступна долгое время и запрос займёт больше секунды.
источник

ДМ

Дмитрий Моцик... in pro.kafka
Ребят, добрый день!
Новичек в работе с кафкой, поэтому нужна помощь)
Есть такой конфиг докера
version: '3.7'
networks:
 analytic:
   driver: bridge
services:
 zookeeper:
   image: bitnami/zookeeper:3.6.2
   env_file: zookeeper/.env
   networks:
     - analytic
   ports:
     - 2181:2181
 kafka:
   image: bitnami/kafka:2.6.0
   ports:
     - 9092:9092
   environment:
     KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
     ALLOW_PLAINTEXT_LISTENER: 1
   depends_on:
     - zookeeper
   networks:
     - analytic

При попытке отправить сообщение ничего не выходит
kafkacat -L -b 127.0.0.1:9092
Metadata for all topics (from broker -1: 127.0.0.1:9092/bootstrap):
1 brokers:
 broker 1010 at bcd7d80f3442:9092 (controller)
2 topics:
 topic "events" with 1 partitions:
   partition 0, leader -1, replicas: 1005, isrs: 1005, Broker: Leader not available
 topic "__consumer_offsets" with 50 partitions:
   partition 0, leader -1, replicas: 1001, isrs: 1001, Broker: Leader not available
   ....


echo '{"action": "read","event": "sdfsdf","service_name": "profile","session": "c3f94c52-6e05-4cfd-b974-14850a1335ba","user": "254c966d-f361-4f38-862d-4ee9717d8224"}' | kafkacat -P -b 127.0.0.1:9092 -t events

Что я делаю не так ?)
источник