参考地址:
http://www.colobu.com/2014/11/19/kafka-spring-integration-in-practice/
kafka 0.9 增加了一个 compile group: 'org.apache.kafka', name: 'kafka-clients', version: '0.9.0.0'
包,是专门用作 client 处理的,虽然处于 beta 但他是未来的方向,推荐学习。以前的 client 需要依赖 compile group: 'org.apache.kafka', name: 'kafka_2.11', version: '0.9.0.0'
有个缺点是它依赖 log4j12 包,容易和项目的依赖冲突,而且包含很多 client 端不需要的抽象。
原文中的发送消息部分,已经在新版的 spring kafka 集成中做了改变,而接收消息部分仍然可用。发送消息部分的代码:
<int:channel id="inputToKafka">
<int:queue/>
</int:channel>
<!-- outbound-channel-adapter 对象, 内部用一个线程池处理消息。关键是 kafka-producer-context-ref。 -->
<int-kafka:outbound-channel-adapter id="kafkaOutboundChannelAdapter"
kafka-producer-context-ref="kafkaProducerContext"
auto-startup="false"
channel="inputToKafka"
order="3"
>
<int:poller fixed-delay="1000" time-unit="MILLISECONDS" receive-timeout="0" task-executor="taskExecutor"/>
</int-kafka:outbound-channel-adapter>
<task:executor id="taskExecutor" pool-size="5" keep-alive="120" queue-capacity="500"/>
<bean id="producerProperties"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="properties">
<props>
<prop key="topic.metadata.refresh.interval.ms">3600000</prop>
<prop key="message.send.max.retries">5</prop>
<prop key="serializer.class">kafka.serializer.StringEncoder</prop>
<prop key="request.required.acks">1</prop>
</props>
</property>
</bean>
<!-- 配置 broker 列表,topic,最终转换成 Kafka 的 Producer。
org.springframework.integration.kafka.support.ProducerMetadata$CompressionType
-->
<int-kafka:producer-context id="kafkaProducerContext"
producer-properties="producerProperties">
<int-kafka:producer-configurations>
<int-kafka:producer-configuration broker-list="10.0.8.177:9092,10.0.8.178:9092,10.0.8.179:9092"
topic="test"
key-class-type="java.lang.String"
value-class-type="java.lang.String"
key-serializer="kafkaStringSerializer"
value-serializer="kafkaStringSerializer"
compression-type="none"/>
</int-kafka:producer-configurations>
</int-kafka:producer-context>