Выбор начальной способности HashSet с ожидаемым количеством уникальных значений и вставок

Мой источник производит примерно 4000–5000 сообщений в день, и Кафка, способный обрабатывать огромный объем данных с высокой пропускной способностью, сможет ли он обрабатывать такой низкий объем, и частота сообщений также будет низкой?

Да. И «Да» не только для Kafka «Core» (брокеры = хранилище, публикация / подписка), но и «Да» для:

  • Производители и клиенты-клиенты Kafka (пишут сообщения и читают сообщения соответственно) [ 110]
  • Kafka Connect (для интеграции Kafka с другими системами, такими как MySQL, Elastisearch, S3)
  • Kafka Streams (для написания приложений обработки в Java / Scala)
  • KSQL (для обработки записи приложения в потоковом SQL)
16
задан Clarkey 24 March 2016 в 12:20
поделиться

5 ответов

Предположение, что Вы знаете, не будет больше чем 50 состояниями (Вы имеете в виду штаты США?),

Set<String> uniqueStates = new HashSet<String>(allStates.length, 0.75);

заключенный в кавычки является определенно неправильным. Я предложил бы, чтобы Вы пошли для начальной способности 50 / 0.75 = 67, или возможно 68, чтобы быть на безопасной стороне.

Я также чувствую потребность указать, что Вы, вероятно, сверхдумаете это сильно. При изменении размеров arraylist дважды от 16 до 64 не собираются давать Вам значимый хит производительности, если это не правильно в самой критической по отношению к производительности части программы.

Таким образом, лучший ответ должен, вероятно, использовать:

new HashSet<String>();

Тем путем Вы не будете возвращаться год спустя и ломать голову, почему Вы выбрали такие странные аргументы конструктора.

15
ответ дан 30 November 2019 в 21:37
поделиться

Используйте конструктора, где Вы не должны указывать эти значения, затем разумные значения по умолчанию выбраны.

7
ответ дан 30 November 2019 в 21:37
поделиться

Безопасная ставка является движением для размера, который является слишком небольшим.

Поскольку изменение размеров улучшено алгоритмом экспоненциального роста (см. stackoverflow подкаст с нескольких недель назад), хождение маленького никогда не будет стоить Вам так очень. Если у Вас будет много наборов (удачный Вы), то для производительности будет иметь значение, если они будут увеличенным размером.

Коэффициент загрузки является хитрым. Я предлагаю оставить его в значении по умолчанию.Я понимаю: Ниже о 0.70f Вы делаете массив слишком большим и поэтому медленнее. Выше 0.80f и Вы начнете добираться до многих ключевых столкновений. По-видимому, зондирование алгоритмов потребует более низких коэффициентов загрузки, чем алгоритмы блока.

Также обратите внимание, что "начальная способность" означает что-то немного отличающееся, чем это появляется думает, большинство людей. Это относится к количеству записей в массиве. Для получения точной способности ко многим элементам разделитесь на желаемый коэффициент загрузки (и вокруг соответственно).

1
ответ дан 30 November 2019 в 21:37
поделиться

Я второй Zarkonnen. Вашим последним вопросом является самый важный. Если это, оказывается, происходит в горячей точке Вашего приложения, это могло бы стоить усилия посмотреть на него и попытаться оптимизировать, иначе циклы ЦП являются более дешевыми, чем зажигание Ваших собственных нейронов.

0
ответ дан 30 November 2019 в 21:37
поделиться

Выскажите хорошее предположение. Нет никакого твердого правила. Если бы Вы знаете, что, вероятно, будет, говорят, что 10-20 состояний, я начался бы с тем номером (20).

0
ответ дан 30 November 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: