and partitioner:
package com.company.rt.producers.utilities.partitioners;
import java.util.concurrent.atomic.AtomicInteger;
import kafka.producer.Partitioner;
import kafka.utils.VerifiableProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
*/
public class KafkaRoundRobinPartitioner implements Partitioner {
private static final Logger LOG =
LoggerFactory.getLogger(KafkaRoundRobinPartitioner.class);
final AtomicInteger counter = new AtomicInteger(0);
public KafkaRoundRobinPartitioner(VerifiableProperties props) {
LOG.info("Instantiated the Storm Round Robin Partitioner class
with properties: \n");
for(String propName : props.props().stringPropertyNames()) {
LOG.info("{}:{} \n", propName, props.props().getProperty(propName));
}
}
@Override
public int partition(Object key, int numberOfPartitions) {
int partitionId = counter.incrementAndGet() % numberOfPartitions;
if (counter.get() > Integer.MAX_VALUE) {
counter.set(0);
}
return partitionId;
}
}
On Wed, Feb 24, 2016 at 6:33 PM, Brian Taylor <
[email protected]> wrote:
> Here's an example Kafka client:
>
> package com.company.rt.services.data;
>
> import java.util.ArrayList;
> import java.util.List;
> import java.util.Map;
> import java.util.Properties;
>
> import com.company.models.Event;
> import kafka.javaapi.producer.Producer;
> import kafka.producer.KeyedMessage;
> import kafka.producer.ProducerConfig;
>
> /**
> *
> */
> public final class MessageManager {
>
> private Properties relaxedProducerProps;
> private ProducerConfig relaxedProducerConfig;
> private Producer<String,String> relaxedProducer;
>
> private Properties durableProducerProps;
> private ProducerConfig durableProducerConfig;
> private Producer<String,String> durableProducer;
>
> public MessageManager(Map map) {
> relaxedProducerProps = new Properties();
> relaxedProducerProps.put("metadata.broker.list",
> map.get("topology.kafka.broker.list"));
> relaxedProducerProps.put("serializer.class",
> "kafka.serializer.StringEncoder");
> relaxedProducerProps.put("key.serializer.class",
> "kafka.serializer.StringEncoder");
> relaxedProducerProps.put("request.required.acks", "1");
> relaxedProducerProps.put("partitioner.class",
> "com.company.rt.producers.utilities.partitioners.KafkaRoundRobinPartitioner");
> relaxedProducerConfig = new ProducerConfig(relaxedProducerProps);
> relaxedProducer = new Producer<>(relaxedProducerConfig);
>
> durableProducerProps = new Properties();
> durableProducerProps.put("metadata.broker.list",
> map.get("topology.kafka.broker.list"));
> durableProducerProps.put("serializer.class",
> "kafka.serializer.StringEncoder");
> durableProducerProps.put("key.serializer.class",
> "kafka.serializer.StringEncoder");
> durableProducerProps.put("request.required.acks", "-1");
> durableProducerProps.put("partitioner.class",
> "com.company.rt.producers.utilities.partitioners.KafkaRoundRobinPartitioner");
> durableProducerConfig = new ProducerConfig(durableProducerProps);
> durableProducer = new Producer<>(durableProducerConfig);
> }
>
> public void send(String topic, String message, boolean durable) throws
> Exception {
> KeyedMessage<String,String> keyedMessage = new
> KeyedMessage<>(topic,"key",message);
> if (durable) durableProducer.send(keyedMessage);
> else relaxedProducer.send(keyedMessage);
> }
>
> public void send(String topic, List<String> messages, boolean durable)
> throws Exception {
> List<KeyedMessage<String, String>> keyedMessages = new ArrayList<>();
> for(String message : messages) {
> keyedMessages.add(new KeyedMessage<>(topic,"key",message));
> }
> if (durable) durableProducer.send(keyedMessages);
> else relaxedProducer.send(keyedMessages);
> }
>
> public void send(String topic, Event event, boolean durable) throws
> Exception {
> // KeyedMessage<String, Event> keyedMessage = new
> KeyedMessage<>(topic, "key", event);
> // if(durable) durableProducer.send(keyedMessage);
> // else relaxedProducer.send(keyedMessage);
> }
>
> }
>
>
> On Wed, Feb 24, 2016 at 3:00 PM, david kavanagh <[email protected]>
> wrote:
>
>> Thanks for the reply guys.
>>
>> I have looked at kafka-node and it looks reasonable simple to integrate
>> Node with Storm. My original problem was getting the KafkaBolt to work, so
>> i can output the data to Kafka and then use kafka-node to consume the data
>> to the Node app. I have had some help from this mailing list trying to get
>> the KafkaBolt to work but there seems to be a java issue (nothing to with
>> Storm) that i can't get to the bottom of. I am doing this as part of my
>> final year project in college and i am brand new to all these technologies
>> (apart from Java) so it is more than likely something i am doing wrong
>> somewhere.
>>
>> I don't actually need to use Kafka. That just seemed like the best way to
>> connect Storm to the app. I have just taken a quick look at Redis and it
>> seems to be a better way of connecting the two. I will try to get that up
>> and running tomorrow and i will post up how i get on. Thanks again, the
>> advice is much appreciated.
>>
>> Regards,
>> David
>>
>> ------------------------------
>> Date: Wed, 24 Feb 2016 14:31:40 -0500
>> Subject: Re: Connecting Storm Output to Node.js app
>> From: [email protected]
>> To: [email protected]
>>
>>
>> Have you tried https://www.npmjs.com/package/kafka-node
>>
>> On Wed, Feb 24, 2016 at 2:28 PM, Patrick Wiener <[email protected]>
>> wrote:
>>
>> Have you considered using Redis?
>>
>> You could hook up Storm with Redis (e.g. through Jedis) and using Redis
>> built in pub/sub mechanism for data retrieval from within Node.js
>>
>>
>> Regards,
>> Patrick
>>
>>
>> Am 23.02.2016 um 19:47 schrieb david kavanagh <[email protected]>:
>>
>> Hello,
>>
>> I currently have Storm up and running on two Ubuntu VM's. I have Storm
>> pulling data from a database on a MySQL Cluster and now I am trying to
>> figure out a way of getting Storm and a Node.js app on a remote VM
>> communicating. I have tried to use a Kafka Topic to store the output
>> from Storm so the app can connect to the topic and gather the data,
>> but i cannot get the KafkaBolt to work as it should. I have tried
>> everything
>> i can think of but no luck. Is there another way of getting Storm to
>> connect
>> to a remote Node.js app? I have searched exhaustively online but cannot
>> find
>> anything. If there are some tutorials i could be pointed to that would be
>> great.
>> Any help at all would be greatly appreciated.
>>
>> Kind Regards
>> David
>>
>>
>>
>>
>>
>> --
>>
>> Warm Regards,
>> Brian Taylor
>>
>> Resolving Architecture .:.
>>
>> 330-812-7098
>>
>> [email protected]
>>
>> http://resolvingarchitecture.com
>>
>> www.linkedin.com/in/javadevops/
>>
>
>
>
> --
>
> Warm Regards,
> Brian Taylor
>
> Resolving Architecture .:.
>
> 330-812-7098
>
> [email protected]
>
> http://resolvingarchitecture.com
>
> www.linkedin.com/in/javadevops/
>
--
Warm Regards,
Brian Taylor
Resolving Architecture .:.
330-812-7098
[email protected]
http://resolvingarchitecture.com
www.linkedin.com/in/javadevops/