#apache-kafka #apachebench
#apache-kafka #apachebench
Вопрос:
У меня есть приложение, в котором я использую apache Kafka, и я пытаюсь выполнить некоторые тесты. Мое приложение состоит из:
а) служба, которая получает http requests
и отправляет сообщения в Kafka. б) a mongoDB
, который получает сообщения от kafka и сохраняет их. Мой Kafka состоит из 1 брокера Kafka, 1 темы и 1 раздела. Также я использую ключи для сообщений в Kafka.
Для своих тестов я использую Apache Bench.
Я создал скрипт test.sh
для своего первого теста на параллелизм выполнения множества запросов. Я всегда отправляю один и тот же объект json.
ab -s 150 -p post.json -T application/ld json -c 10000 -n 100000 -rk http://localhost:3000/service_discovery/scorpio > tests/test1.txt amp;
ab -s 150 -p post.json -T application/ld json -c 10000 -n 100000 -rk http://localhost:3000/service_discovery/scorpio > tests/test2.txt amp;
ab -s 150 -p post.json -T application/ld json -c 10000 -n 100000 -rk http://localhost:3000/service_discovery/scorpio > tests/test3.txt amp;
ab -s 150 -p post.json -T application/ld json -c 10000 -n 100000 -rk http://localhost:3000/service_discovery/scorpio > tests/test4.txt amp;
ab -s 150 -p post.json -T application/ld json -c 10000 -n 100000 -rk http://localhost:3000/service_discovery/scorpio > tests/test5.txt amp;
Первый тест:
1) 1 раздел. Я делаю 5.000.000.000
http-запросы, и сквозная пропускная способность такова 53.22 req/sec
.
Кроме того, я создал скрипт test2.sh
для своего второго теста на параллелизм выполнения множества запросов. Я отправляю разные объекты json с разным ключом и проверил, что каждый объект хранится в разных разделах.
ab -s 180 -p request_post/post.json -T application/ld json -c 10000 -n 100000 -rk http://localhost:3000/service_discovery/scorpio > tests/test1.txt amp;
ab -s 180 -p request_post/post2.json -T application/ld json -c 10000 -n 100000 -rk http://localhost:3000/service_discovery/scorpio > tests/test2.txt amp;
ab -s 180 -p request_post/post3.json -T application/ld json -c 10000 -n 100000 -rk http://localhost:3000/service_discovery/scorpio > tests/test3.txt amp;
ab -s 180 -p request_post/post4.json -T application/ld json -c 10000 -n 100000 -rk http://localhost:3000/service_discovery/scorpio > tests/test4.txt amp;
ab -s 180 -p request_post/post5.json -T application/ld json -c 10000 -n 100000 -rk http://localhost:3000/service_discovery/scorpio > tests/test5.txt amp;
Второй тест:
2) 5 разделов. Я делаю 5.000.000.000
http-запросы, и сквозная пропускная способность такова 50.13 req/sec
.
Я ожидал более высокой пропускной способности во втором тесте. Итак, вопрос: почему я не получаю лучшую пропускную способность с большим количеством разделов?
(если вам нужна дополнительная информация, спросите меня)
Комментарии:
1. Быстрый вопрос, когда вы добавили 5 разделов kafka, было ли у вас также 5 потребителей, которые параллельно потребляли данные из 5 разделов или нет? Кроме того, вы проверили, были ли ваши сообщения распределены (почти) равномерно между разделами?
2. Да, сообщения распределяются равномерно между разделами. На первый вопрос я не могу вам точно ответить. Должен ли я объявить 5 потоков или мне нужно что-то изменить в своем коде?
3. Вы можете просто запустить 5 экземпляров вашего потребителя с одним и тем же идентификатором группы потребителей . Каждому экземпляру будет назначен 1 раздел, и вы эффективно достигнете параллелизма. Вам следует ознакомиться с группами потребителей в kafka, если вы еще не знаете о них.