Java Code Examples for kafka.javaapi.PartitionMetadata#partitionId()
The following examples show how to use
kafka.javaapi.PartitionMetadata#partitionId() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: KafkaWrapper.java From incubator-gobblin with Apache License 2.0 | 6 votes |
private void refreshTopicMetadata(KafkaPartition partition) { for (String broker : KafkaWrapper.this.getBrokers()) { List<TopicMetadata> topicMetadataList = fetchTopicMetadataFromBroker(broker, partition.getTopicName()); if (topicMetadataList != null && !topicMetadataList.isEmpty()) { TopicMetadata topicMetadata = topicMetadataList.get(0); for (PartitionMetadata partitionMetadata : topicMetadata.partitionsMetadata()) { if (partitionMetadata.partitionId() == partition.getId()) { partition.setLeader(partitionMetadata.leader().id(), partitionMetadata.leader().host(), partitionMetadata.leader().port()); break; } } break; } } }
Example 2
Source File: Kafka08ConsumerClient.java From incubator-gobblin with Apache License 2.0 | 6 votes |
private void refreshTopicMetadata(KafkaPartition partition) { for (String broker : this.brokers) { List<TopicMetadata> topicMetadataList = fetchTopicMetadataFromBroker(broker, partition.getTopicName()); if (topicMetadataList != null && !topicMetadataList.isEmpty()) { TopicMetadata topicMetadata = topicMetadataList.get(0); for (PartitionMetadata partitionMetadata : topicMetadata.partitionsMetadata()) { if (partitionMetadata.partitionId() == partition.getId()) { partition.setLeader(partitionMetadata.leader().id(), partitionMetadata.leader().host(), partitionMetadata .leader().port()); break; } } break; } } }
Example 3
Source File: KafkaMetadataUtil.java From attic-apex-malhar with Apache License 2.0 | 5 votes |
/** * @param brokerList * @param topic * @param partition * @return Get the partition metadata for specific topic and partition via the brokerList<br> * null if topic is not found */ public static PartitionMetadata getPartitionForTopic(Set<String> brokerList, String topic, int partition) { List<PartitionMetadata> pmds = getPartitionsForTopic(brokerList, topic); if (pmds == null) { return null; } for (PartitionMetadata pmd : pmds) { if (pmd.partitionId() != partition) { continue; } return pmd; } return null; }
Example 4
Source File: AbstractExactlyOnceKafkaOutputOperator.java From attic-apex-malhar with Apache License 2.0 | 5 votes |
private void initializeLastProcessingOffset() { // read last received kafka message TopicMetadata tm = KafkaMetadataUtil.getTopicMetadata(Sets.newHashSet((String)getConfigProperties().get(KafkaMetadataUtil.PRODUCER_PROP_BROKERLIST)), this.getTopic()); if (tm == null) { throw new RuntimeException("Failed to retrieve topic metadata"); } partitionNum = tm.partitionsMetadata().size(); lastMsgs = new HashMap<Integer, Pair<byte[],byte[]>>(partitionNum); for (PartitionMetadata pm : tm.partitionsMetadata()) { String leadBroker = pm.leader().host(); int port = pm.leader().port(); String clientName = this.getClass().getName().replace('$', '.') + "_Client_" + tm.topic() + "_" + pm.partitionId(); SimpleConsumer consumer = new SimpleConsumer(leadBroker, port, 100000, 64 * 1024, clientName); long readOffset = KafkaMetadataUtil.getLastOffset(consumer, tm.topic(), pm.partitionId(), kafka.api.OffsetRequest.LatestTime(), clientName); FetchRequest req = new FetchRequestBuilder().clientId(clientName).addFetch(tm.topic(), pm.partitionId(), readOffset - 1, 100000).build(); FetchResponse fetchResponse = consumer.fetch(req); for (MessageAndOffset messageAndOffset : fetchResponse.messageSet(tm.topic(), pm.partitionId())) { Message m = messageAndOffset.message(); ByteBuffer payload = m.payload(); ByteBuffer key = m.key(); byte[] valueBytes = new byte[payload.limit()]; byte[] keyBytes = new byte[key.limit()]; payload.get(valueBytes); key.get(keyBytes); lastMsgs.put(pm.partitionId(), new Pair<byte[], byte[]>(keyBytes, valueBytes)); } } }
Example 5
Source File: LegacyKafkaClient.java From secor with Apache License 2.0 | 5 votes |
private HostAndPort findLeader(TopicPartition topicPartition) { SimpleConsumer consumer = null; try { LOG.debug("looking up leader for topic {} partition {}", topicPartition.getTopic(), topicPartition.getPartition()); consumer = createConsumer( mConfig.getKafkaSeedBrokerHost(), mConfig.getKafkaSeedBrokerPort(), "leaderLookup"); List<String> topics = new ArrayList<String>(); topics.add(topicPartition.getTopic()); TopicMetadataRequest request = new TopicMetadataRequest(topics); TopicMetadataResponse response = consumer.send(request); List<TopicMetadata> metaData = response.topicsMetadata(); for (TopicMetadata item : metaData) { for (PartitionMetadata part : item.partitionsMetadata()) { if (part.partitionId() == topicPartition.getPartition()) { return HostAndPort.fromParts(part.leader().host(), part.leader().port()); } } } } finally { if (consumer != null) { consumer.close(); } } return null; }
Example 6
Source File: ScribenginAM.java From Scribengin with GNU Affero General Public License v3.0 | 5 votes |
private void storeMetadata(String topic, PartitionMetadata p) { Integer id = new Integer(p.partitionId()); Map<Integer, PartitionMetadata> m; if (topicMetadataMap.containsKey(id)) { LOG.info("already crreated a partitionMap. Just retrieve it."); //xxx m = topicMetadataMap.get(topic); } else { LOG.info("making a new partitionMap"); //xxx m = new HashMap<Integer, PartitionMetadata>(); topicMetadataMap.put(topic, m); } m.put(id, p); }
Example 7
Source File: KafkaTool.java From Scribengin with GNU Affero General Public License v3.0 | 5 votes |
public PartitionMetadata findPartitionMetadata(String topic, int partition) throws Exception { TopicMetadata topicMetadata = findTopicMetadata(topic); for (PartitionMetadata sel : topicMetadata.partitionsMetadata()) { if (sel.partitionId() == partition) return sel; } return null; }
Example 8
Source File: KafkaClusterTool.java From Scribengin with GNU Affero General Public License v3.0 | 5 votes |
PartitionMetadata findPartition(TopicMetadata topicMetadata, int partition) { for (PartitionMetadata sel : topicMetadata.partitionsMetadata()) { if (sel.partitionId() == partition) return sel; } throw new RuntimeException("Cannot find the partition " + partition); }
Example 9
Source File: AckKafkaWriterTestRunner.java From Scribengin with GNU Affero General Public License v3.0 | 5 votes |
PartitionMetadata findPartition(TopicMetadata topicMetadata, int partion) { for (PartitionMetadata sel : topicMetadata.partitionsMetadata()) { if (sel.partitionId() == partition) return sel; } throw new RuntimeException("Cannot find the partition " + partition); }
Example 10
Source File: Kafka08PartitionDiscoverer.java From Flink-CEPplus with Apache License 2.0 | 4 votes |
/** * Send request to Kafka to get partitions for topics. * * @param topics The name of the topics. */ public List<KafkaTopicPartitionLeader> getPartitionLeadersForTopics(List<String> topics) { List<KafkaTopicPartitionLeader> partitions = new LinkedList<>(); retryLoop: for (int retry = 0; retry < numRetries; retry++) { brokersLoop: for (int arrIdx = 0; arrIdx < seedBrokerAddresses.length; arrIdx++) { LOG.info("Trying to get topic metadata from broker {} in try {}/{}", seedBrokerAddresses[currentContactSeedBrokerIndex], retry, numRetries); try { // clear in case we have an incomplete list from previous tries partitions.clear(); for (TopicMetadata item : consumer.send(new TopicMetadataRequest(topics)).topicsMetadata()) { if (item.errorCode() != ErrorMapping.NoError()) { // warn and try more brokers LOG.warn("Error while getting metadata from broker {} to find partitions for {}. Error: {}.", seedBrokerAddresses[currentContactSeedBrokerIndex], topics.toString(), ErrorMapping.exceptionFor(item.errorCode()).getMessage()); useNextAddressAsNewContactSeedBroker(); continue brokersLoop; } if (!topics.contains(item.topic())) { LOG.warn("Received metadata from topic " + item.topic() + " even though it was not requested. Skipping ..."); useNextAddressAsNewContactSeedBroker(); continue brokersLoop; } for (PartitionMetadata part : item.partitionsMetadata()) { Node leader = brokerToNode(part.leader()); KafkaTopicPartition ktp = new KafkaTopicPartition(item.topic(), part.partitionId()); KafkaTopicPartitionLeader pInfo = new KafkaTopicPartitionLeader(ktp, leader); partitions.add(pInfo); } } break retryLoop; // leave the loop through the brokers } catch (Exception e) { //validates seed brokers in case of a ClosedChannelException validateSeedBrokers(seedBrokerAddresses, e); LOG.warn("Error communicating with broker {} to find partitions for {}. {} Message: {}", seedBrokerAddresses[currentContactSeedBrokerIndex], topics, e.getClass().getName(), e.getMessage()); LOG.debug("Detailed trace", e); // we sleep a bit. Retrying immediately doesn't make sense in cases where Kafka is reorganizing the leader metadata try { Thread.sleep(500); } catch (InterruptedException e1) { // sleep shorter. } useNextAddressAsNewContactSeedBroker(); } } // brokers loop } // retries loop return partitions; }
Example 11
Source File: Kafka08PartitionDiscoverer.java From flink with Apache License 2.0 | 4 votes |
/** * Send request to Kafka to get partitions for topics. * * @param topics The name of the topics. */ public List<KafkaTopicPartitionLeader> getPartitionLeadersForTopics(List<String> topics) { List<KafkaTopicPartitionLeader> partitions = new LinkedList<>(); retryLoop: for (int retry = 0; retry < numRetries; retry++) { brokersLoop: for (int arrIdx = 0; arrIdx < seedBrokerAddresses.length; arrIdx++) { LOG.info("Trying to get topic metadata from broker {} in try {}/{}", seedBrokerAddresses[currentContactSeedBrokerIndex], retry, numRetries); try { // clear in case we have an incomplete list from previous tries partitions.clear(); for (TopicMetadata item : consumer.send(new TopicMetadataRequest(topics)).topicsMetadata()) { if (item.errorCode() != ErrorMapping.NoError()) { // warn and try more brokers LOG.warn("Error while getting metadata from broker {} to find partitions for {}. Error: {}.", seedBrokerAddresses[currentContactSeedBrokerIndex], topics.toString(), ErrorMapping.exceptionFor(item.errorCode()).getMessage()); useNextAddressAsNewContactSeedBroker(); continue brokersLoop; } if (!topics.contains(item.topic())) { LOG.warn("Received metadata from topic " + item.topic() + " even though it was not requested. Skipping ..."); useNextAddressAsNewContactSeedBroker(); continue brokersLoop; } for (PartitionMetadata part : item.partitionsMetadata()) { Node leader = brokerToNode(part.leader()); KafkaTopicPartition ktp = new KafkaTopicPartition(item.topic(), part.partitionId()); KafkaTopicPartitionLeader pInfo = new KafkaTopicPartitionLeader(ktp, leader); partitions.add(pInfo); } } break retryLoop; // leave the loop through the brokers } catch (Exception e) { //validates seed brokers in case of a ClosedChannelException validateSeedBrokers(seedBrokerAddresses, e); LOG.warn("Error communicating with broker {} to find partitions for {}. {} Message: {}", seedBrokerAddresses[currentContactSeedBrokerIndex], topics, e.getClass().getName(), e.getMessage()); LOG.debug("Detailed trace", e); // we sleep a bit. Retrying immediately doesn't make sense in cases where Kafka is reorganizing the leader metadata try { Thread.sleep(500); } catch (InterruptedException e1) { // sleep shorter. } useNextAddressAsNewContactSeedBroker(); } } // brokers loop } // retries loop return partitions; }
Example 12
Source File: OffsetMonitor.java From uReplicator with Apache License 2.0 | 4 votes |
private void updateTopicList() { logger.info("Update topicList"); topicList.clear(); partitionLeader.clear(); // update topicList topicList = helixMirrorMakerManager.getTopicLists(); logger.debug("TopicList: {}", topicList); Set<String> topicSet = new HashSet<>(topicList); // update partitionLeader for (String broker : srcBrokerList) { try { SimpleConsumer consumer = getSimpleConsumer(broker); TopicMetadataRequest req = new TopicMetadataRequest(topicList); kafka.javaapi.TopicMetadataResponse resp = consumer.send(req); List<TopicMetadata> metaData = resp.topicsMetadata(); for (TopicMetadata tmd : metaData) { for (PartitionMetadata pmd : tmd.partitionsMetadata()) { TopicAndPartition topicAndPartition = new TopicAndPartition(tmd.topic(), pmd.partitionId()); if (topicSet.contains(tmd.topic())) { partitionLeader.put(topicAndPartition, pmd.leader()); } } } Iterator<Entry<TopicAndPartition, TopicPartitionLag>> iter = noProgressMap.entrySet() .iterator(); while (iter.hasNext()) { TopicAndPartition tp = iter.next().getKey(); if (!topicSet.contains(tp.topic())) { iter.remove(); logger.info("Remove non exist topic {} from noProgressMap", tp); } } break; } catch (Exception e) { logger.warn("Got exception to get metadata from broker=" + broker, e); } } logger.debug("partitionLeader: {}", partitionLeader); }
Example 13
Source File: AbstractKafkaInputOperator.java From attic-apex-malhar with Apache License 2.0 | 4 votes |
/** * * Check whether the operator needs repartition based on reported stats * * @return true if repartition is required * false if repartition is not required */ private boolean isPartitionRequired(int opid, List<KafkaConsumer.KafkaMeterStats> kstats) { long t = System.currentTimeMillis(); // If stats are available then update offsets // Do this before re-partition interval check below to not miss offset updates if (kstats.size() > 0) { logger.debug("Checking offset updates for offset manager"); updateOffsets(kstats); } if (t - lastCheckTime < repartitionCheckInterval) { // return false if it's within repartitionCheckInterval since last time it check the stats return false; } if (repartitionInterval < 0) { // if repartition is disabled return false; } if (t - lastRepartitionTime < repartitionInterval) { // return false if it's still within repartitionInterval since last (re)partition return false; } kafkaStatsHolder.put(opid, kstats); if (kafkaStatsHolder.size() != currentPartitionInfo.size() || currentPartitionInfo.size() == 0) { // skip checking if the operator hasn't collected all the stats from all the current partitions return false; } try { // monitor if new kafka partition added { Set<KafkaPartition> existingIds = new HashSet<KafkaPartition>(); for (PartitionInfo pio : currentPartitionInfo) { existingIds.addAll(pio.kpids); } Map<String, List<PartitionMetadata>> partitionsMeta = KafkaMetadataUtil.getPartitionsForTopic(consumer.brokers, consumer.getTopic()); if (partitionsMeta == null) { //broker(s) has temporary issue to get metadata return false; } for (Map.Entry<String, List<PartitionMetadata>> en : partitionsMeta.entrySet()) { if (en.getValue() == null) { //broker(s) has temporary issue to get metadata continue; } for (PartitionMetadata pm : en.getValue()) { KafkaPartition pa = new KafkaPartition(en.getKey(), consumer.topic, pm.partitionId()); if (!existingIds.contains(pa)) { newWaitingPartition.add(pa); } } } if (newWaitingPartition.size() != 0) { // found new kafka partition lastRepartitionTime = t; return true; } } return false; } finally { // update last check time lastCheckTime = System.currentTimeMillis(); } }
Example 14
Source File: KafkaPartitionReaderUnitTest.java From Scribengin with GNU Affero General Public License v3.0 | 4 votes |
private PartitionMetadata findPartition(List<PartitionMetadata> list, int partition) { for(PartitionMetadata sel : list) { if(sel.partitionId() == partition) return sel; } return null; }