Как поместить запись 25k в поток Kinesis и инструмент тестирования, чтобы подтвердить это

Я разработал программу, которая записывает запись в веб-службу Amazon kinesis Stream. Я пытаюсь понять, есть ли у нас какой-либо программный инструмент, который позволит мне измерить максимальную пропускную способность, которую мой код генерирует для Kinesis Stream для 1 осколка за одну секунду. Да, я согласен, это тоже зависит от конфигурации оборудования. Но для начала я хочу знать, что такое машина общего назначения, тогда, возможно, я смогу увидеть горизонтальную масштабируемость.

С этим я пытаюсь достичь 25k записей в секунду для записи в поток kinesis.

Ссылка: Kinesis http://aws.amazon.com/kinesis/


person Sam    schedule 19.06.2015    source источник


Ответы (2)


Я считаю, что вы можете использовать для этого Apache JMeter как

  1. Скачайте и установите JMeter
  2. Загрузите клиентскую библиотеку Java Amazon Kinesis и перетащите банки в путь к классам JMeter (вы можете использовать папку / lib вашей установки JMeter)
  3. Используя JSR223 Sampler, "отличный" язык и AmazonKinesisRecordProducerSample в качестве справочной реализации кода, который будет писать записи стримить

См. Beanshell против JSR223 против Java JMeter Scripting: производительность -Off You've Been Waiting For! с инструкциями по установке "отличной" поддержки движка и передовыми методами написания сценариев.

person Dmitri T    schedule 19.06.2015

Спасибо за подсказки. Я нашел выход для рабочего кода в Groovy, чтобы использовать AWS-Java-SDK для отправки записей с помощью Kinesis Stream: и вот пример кода:

/*
 * Copyright 2012-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */

import java.nio.ByteBuffer
import java.util.List
import java.util.concurrent.TimeUnit

import com.amazonaws.AmazonClientException
import com.amazonaws.AmazonServiceException
import com.amazonaws.auth.AWSCredentials
import com.amazonaws.auth.profile.ProfileCredentialsProvider
import com.amazonaws.services.kinesis.AmazonKinesisClient
import com.amazonaws.services.kinesis.model.CreateStreamRequest
import com.amazonaws.services.kinesis.model.DescribeStreamRequest
import com.amazonaws.services.kinesis.model.DescribeStreamResult
import com.amazonaws.services.kinesis.model.ListStreamsRequest
import com.amazonaws.services.kinesis.model.ListStreamsResult
import com.amazonaws.services.kinesis.model.PutRecordRequest
import com.amazonaws.services.kinesis.model.PutRecordResult
import com.amazonaws.services.kinesis.model.ResourceNotFoundException
import com.amazonaws.services.kinesis.model.StreamDescription

 class AmazonKinesisRecordProducerSample {

    /*
     * Before running the code:
     *      Fill in your AWS access credentials in the provided credentials
     *      file template, and be sure to move the file to the default location
     *      (~/.aws/credentials) where the sample code will load the
     *      credentials from.
     *      https://console.aws.amazon.com/iam/home?#security_credential
     *
     * WARNING:
     *      To avoid accidental leakage of your credentials, DO NOT keep
     *      the credentials file in your source directory.
     */

     def kinesis

    def init() {
        /*
         * The ProfileCredentialsProvider will return your [default]
         * credential profile by reading from the credentials file located at
         * (~/.aws/credentials).
         */
            AWSCredentials credentials = null
            credentials = new ProfileCredentialsProvider().getCredentials()
             kinesis = new AmazonKinesisClient(credentials)         
    }    
}

 def amazonKinesisRecordProducerSample= new AmazonKinesisRecordProducerSample() 
amazonKinesisRecordProducerSample.init()

  def myStreamName="<KINESIS STREAM NAME>"

        println("Press CTRL-C to stop.")
        // Write records to the stream until this program is aborted.
        while (true) {
            def createTime = System.currentTimeMillis()
            def data='<Data IN STRING FORMAT>'
            def partitionkey="<PARTITION KEY>"
            def putRecordRequest = new PutRecordRequest()
            putRecordRequest.setStreamName(myStreamName)
           putRecordRequest.setData(ByteBuffer.wrap(String.valueOf(data).getBytes()))
          putRecordRequest.setPartitionKey(partitionkey)
            def putRecordResult = new PutRecordResult()
            putRecordResult = amazonKinesisRecordProducerSample.kinesis.putRecord(putRecordRequest)
            printf("Successfully put record, partition key : %s, ShardID : %s, SequenceNumber : %s.\n",
                    putRecordRequest.getPartitionKey(),
                    putRecordResult.getShardId(),
                    putRecordResult.getSequenceNumber())
        }

Примечание. Этот код будет работать только в том случае, если у вас уже есть поток Kinesis и он включен. Если вам необходимо создать поток, а затем использовать его, см. Пример кода, приведенный в папке aws-java-sdk src.

person Nishit NShah    schedule 22.05.2016
comment
возникла проблема при вызове того же скрипта из jmeter. Вот ошибка, которую я получаю при выполнении скрипта: 2016/05/24 12:00:52 ОШИБКА - jmeter.threads.JMeterThread: Тест не пройден! java.lang.NoSuchMethodError: com.amazonaws.SDKGlobalConfiguration.isInRegionOptimizedModeEnabled () Z Я добавил все поддерживаемые jar-файлы в папки jmeter lib, и кажется, что jmeter может скомпилировать код, но не может найти метод во время выполнения. какие-либо предложения? - person Nishit NShah; 24.05.2016
comment
Я решил эту проблему, используя плагин jmeter в intellij. теперь я могу выполнить сценарий. Однако он не работает при выполнении в режиме без графического интерфейса. - person Nishit NShah; 30.05.2016