Я не могу сказать , почему Джеймс Гослинг и другие выбрали эту конкретную альтернативу ...
Однако использование круглых скобок вместо фигурных скобок создало бы серьезную проблему двусмысленности для грамматика Java. Рассмотрим следующий пример:
Object[] tableHeaders = ("Cars");
Обозначают ли круглые скобки конструктор массива или являются частью синтаксиса выражения нормального выражения?
Теперь можно было бы подойти с некоторыми сложными правилами приоритета, чтобы покрыть это, но это затрудняет жизнь как для программистов, так и для авторов компилятора.
(На грамматическом уровне парсер Java должен иметь дело с двусмысленностью в:
VariableInitializer:
ArrayInitializer
Expression
В приведенном выше примере ("Cars")
соответствует как ArrayInitializer, так и Expression productions ... если вы используете круглые скобки для инициализаторов массива. Решение, которое является правильным значением, потребует просмотра объявленного типа переменной ... с последующим контекстом
Я бы сказал, что они сделали правильный выбор, не используя круглые скобки для инициализаторов массива.
Квадратные скобки не будут работать или. Попробуйте объяснить это ...
... = new Object[]["Cars"]; // 1-D array
против
... = new Object[21][]; // 2-D array
против
... = new Object[][]; // is that 1-D or 2-D?
Прежде всего, отметим, что классы ConsumerConnector
или kafka.consumer.KafkaStream
устарели в версии kafka v # 0.11.0. В случае, если вы используете старую версию, вы должны запланировать обновление до более новой версии по крайней мере v # 1.0 или более.
Будет ли метод createMessageStreams последовательно считывать данные из темы или считывать данные в определенном количестве пакетов и обрабатывать их?
blockquote>
.createMessageStreams
возвращает карту темы и список KafkaStream пара.(topic,list#stream)
Каждый поток поддерживает итератор для сообщений или пару метаданных для темы. Он читает данные последовательно только внутри раздела. Если у вас больше разделов, чем количество потоковых потоков, один поток может читать из нескольких разделов. Но только в пределах разделов порядок последовательности гарантирован.for (final KafkaStream<byte[], byte[]> stream : streamList) { ConsumerIterator<byte[], byte[]> it= stream.iterator(); while (it.hasNext()) { String message = new String(it.next().message()); System.out.println(message); } } }
Эквивалентной функциональностью в v # 0.11 и далее является метод
.poll()
. Вы можете установитьmax.poll.records
илиmax.poll.interval.ms
, чтобы установить количество записей на запрос опроса и продолжительность интервала соответственно.Вы можете найти нового потребителя здесь: https://kafka.apache.org/20/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html