Я новичок в kafka. Мое требование: у меня есть два раздела, например Partition-0 и Partition-1, и у меня есть список значений, который также содержит значение KEY. Я хочу хранить данные в соответствии с моим ключом, так как ключ-1 перейдет в раздел-0, ключ-2 перейдет в раздел-1. Со старым API есть способ достичь, как нам нужно реализовать интерфейс Partition, но как я могу сделать это с помощью нового API. спасибоKafka: Как достичь Round Robin Partition в Kafka
ответ
С новым продюсером вы также можете реализовать интерфейс Partitioner
(https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/clients/producer/Partitioner.java) для достижения кругового распределения.
Вы можете использовать DefaultPartitioner
для справки - https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/clients/producer/internals/DefaultPartitioner.java
Вы можете производить Кафки в циклическом переопределении default partitioner от производителя Кафки.
Реализация псевдо
class RRPartitioner():
def __init__():
# Using topic metadata get total number of partitions
self.total_partitions = client[topic].get_number_partitions()
self.part_offset = 0
def partitioner(self, key, msg):
if self.part_offset > self.total_partitions:
self.part_offset = 0
return self.part_offset
else:
self.part_offset += 1
return self.part_offset
Над реализацией это чисто циклическое, если вы хотите, чтобы сообщения будут упорядочены в соответствии с ключами и имеют циклический вам придется делать больше в пользовательском секционирования.
Если вы хотите работать с круговым движением, просто не передавайте ключ при записи в Продюсер, а DefaultPartitioner
выполнит эту работу за вас. Вам не нужно писать пользовательскую реализацию. Из Javadocs:
/**
* The default partitioning strategy:
* <ul>
* <li>If a partition is specified in the record, use it
* <li>If no partition is specified but a key is present choose a partition based on a hash of the key
* <li>If no partition or key is present choose a partition in a round-robin fashion
*/
- 1. Kafka multiple partition ordering
- 2. PartitionId в kafka replicated partition
- 3. kafka NoClassDefFoundError kafka/Kafka
- 4. Default partition of the topic in Kafka
- 5. kafka multi-partition только можно получить сообщение
- 6. Kafka 0.8.2 потребитель
- 7. Round Robin Scheduling
- 8. RabbitMQ Round Robin
- 9. Настройка сервера Round robin
- 10. Elasticsearch (round-robin sorting)
- 11. Python «round robin»
- 12. Внедрение Round robin java
- 13. Сортировка Round Robin соответствует
- 14. Round robin in C#
- 15. Алгоритм Round Robin Scheduling
- 16. MySQL Round Robin Select
- 17. Round Robin scheduling
- 18. mongodb как round-robin-database
- 19. Создать Round Robin в Twilio
- 20. Kafka дает NoSuchElementException
- 21. отправьте подтверждение kafka в компоненте camel-kafka
- 22. NoSuchElementException kafka
- 23. Как мы можем достичь этого в Apache Kafka
- 24. Turnoff Kafka, Scala Logging
- 25. Разница в kafka 0.8 с kafka 0.10
- 26. Ошибка лидера Kafka
- 27. Понимание метаданных раздела Kafka
- 28. Алгоритм Round robin в скрипте unix shell
- 29. Порядок LINQ от «round robin»
- 30. Kafka дает LeaderNotFound Exception
Это самое простое решение, но оно не будет работать, если вы добавите раздел во время выполнения, который является полностью действительным случае – serejja
True..you придется перезапустить производитель или опрос периодически для метаданных изменения. Бюст большинства существующих ключевых производителей будет иметь такую же проблему IIRC. –