You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@metron.apache.org by merrimanr <gi...@git.apache.org> on 2017/11/02 17:47:03 UTC
[GitHub] metron pull request #826: METRON-1291: Kafka produce REST endpoint does not ...
GitHub user merrimanr opened a pull request:
https://github.com/apache/metron/pull/826
METRON-1291: Kafka produce REST endpoint does not work in a Kerberized cluster
## Contributor Comments
This PR adds Kerberos support to the http://node1:8082/swagger-ui.html#!/kafka-controller/produceUsingPOST endpoint. This can be verified in full dev by enabling Kerberos and using that endpoint to produce a message. The same message should be returned with a call to the http://node1:8082/swagger-ui.html#!/kafka-controller/getSampleUsingGET endpoint (using the same topic).
I also added a unit test for the KafkaConfig class.
## Pull Request Checklist
Thank you for submitting a contribution to Apache Metron.
Please refer to our [Development Guidelines](https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=61332235) for the complete guide to follow for contributions.
Please refer also to our [Build Verification Guidelines](https://cwiki.apache.org/confluence/display/METRON/Verifying+Builds?show-miniview) for complete smoke testing guides.
In order to streamline the review of the contribution we ask you follow these guidelines and ask you to double check the following:
### For all changes:
- [x] Is there a JIRA ticket associated with this PR? If not one needs to be created at [Metron Jira](https://issues.apache.org/jira/browse/METRON/?selectedTab=com.atlassian.jira.jira-projects-plugin:summary-panel).
- [x] Does your PR title start with METRON-XXXX where XXXX is the JIRA number you are trying to resolve? Pay particular attention to the hyphen "-" character.
- [x] Has your PR been rebased against the latest commit within the target branch (typically master)?
### For code changes:
- [x] Have you included steps to reproduce the behavior or problem that is being changed or addressed?
- [x] Have you included steps or a guide to how the change may be verified and tested manually?
- [x] Have you ensured that the full suite of tests and checks have been executed in the root metron folder via:
```
mvn -q clean integration-test install && build_utils/verify_licenses.sh
```
- [x] Have you written or updated unit tests and or integration tests to verify your changes?
- [x] If adding new dependencies to the code, are these dependencies licensed in a way that is compatible for inclusion under [ASF 2.0](http://www.apache.org/legal/resolved.html#category-a)?
- [x] Have you verified the basic functionality of the build by building and running locally with Vagrant full-dev environment or the equivalent?
### For documentation related changes:
- [x] Have you ensured that format looks appropriate for the output in which it is rendered by building and verifying the site-book? If not then run the following commands and the verify changes via `site-book/target/site/index.html`:
```
cd site-book
mvn site
```
#### Note:
Please ensure that once the PR is submitted, you check travis-ci for build issues and submit an update to your PR as soon as possible.
It is also recommended that [travis-ci](https://travis-ci.org) is set up for your personal repository such that your branches are built there before submitting a pull request.
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/merrimanr/incubator-metron METRON-1291
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/metron/pull/826.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #826
----
commit 88665069bbadceb918741d385e81ffe450dca129
Author: merrimanr <me...@gmail.com>
Date: 2017-11-02T17:43:21Z
initial commit
----
---
[GitHub] metron issue #826: METRON-1291: Kafka produce REST endpoint does not work in...
Posted by cestella <gi...@git.apache.org>.
Github user cestella commented on the issue:
https://github.com/apache/metron/pull/826
+1 by inspection, great job.
---
[GitHub] metron issue #826: METRON-1291: Kafka produce REST endpoint does not work in...
Posted by merrimanr <gi...@git.apache.org>.
Github user merrimanr commented on the issue:
https://github.com/apache/metron/pull/826
The latest commit address the issue of making the Kafka security protocol configurable.
---
[GitHub] metron pull request #826: METRON-1291: Kafka produce REST endpoint does not ...
Posted by cestella <gi...@git.apache.org>.
Github user cestella commented on a diff in the pull request:
https://github.com/apache/metron/pull/826#discussion_r149420627
--- Diff: metron-interface/metron-rest/src/main/java/org/apache/metron/rest/config/KafkaConfig.java ---
@@ -108,6 +108,9 @@ public ZkUtils zkUtils() {
producerConfig.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
producerConfig.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
producerConfig.put("request.required.acks", 1);
+ if (environment.getProperty(MetronRestConstants.KERBEROS_ENABLED_SPRING_PROPERTY, Boolean.class, false)) {
+ producerConfig.put("security.protocol", "SASL_PLAINTEXT");
--- End diff --
Shouldn't we pull this from the `KAFKA_SECURITY_PROTOCOL` environment variable? Looks like it's being set in `metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/package/templates/metron.j2`
---
[GitHub] metron pull request #826: METRON-1291: Kafka produce REST endpoint does not ...
Posted by asfgit <gi...@git.apache.org>.
Github user asfgit closed the pull request at:
https://github.com/apache/metron/pull/826
---
[GitHub] metron pull request #826: METRON-1291: Kafka produce REST endpoint does not ...
Posted by justinleet <gi...@git.apache.org>.
Github user justinleet commented on a diff in the pull request:
https://github.com/apache/metron/pull/826#discussion_r150653926
--- Diff: metron-interface/metron-rest/src/main/java/org/apache/metron/rest/config/KafkaConfig.java ---
@@ -108,6 +108,9 @@ public ZkUtils zkUtils() {
producerConfig.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
producerConfig.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
producerConfig.put("request.required.acks", 1);
+ if (environment.getProperty(MetronRestConstants.KERBEROS_ENABLED_SPRING_PROPERTY, Boolean.class, false)) {
+ producerConfig.put("security.protocol", "SASL_PLAINTEXT");
--- End diff --
KAFKA_SECURITY_PROTOCOL is carried through by metron.j2 (`KAFKA_SECURITY_PROTOCOL="{{kafka_security_protocol}}"`). Given that, we should be fine to use it here, I believe.
---
[GitHub] metron pull request #826: METRON-1291: Kafka produce REST endpoint does not ...
Posted by merrimanr <gi...@git.apache.org>.
Github user merrimanr commented on a diff in the pull request:
https://github.com/apache/metron/pull/826#discussion_r150560129
--- Diff: metron-interface/metron-rest/src/main/java/org/apache/metron/rest/config/KafkaConfig.java ---
@@ -108,6 +108,9 @@ public ZkUtils zkUtils() {
producerConfig.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
producerConfig.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
producerConfig.put("request.required.acks", 1);
+ if (environment.getProperty(MetronRestConstants.KERBEROS_ENABLED_SPRING_PROPERTY, Boolean.class, false)) {
+ producerConfig.put("security.protocol", "SASL_PLAINTEXT");
--- End diff --
`metron.j2` is always available to REST. KAFKA_SECURITY_PROTOCOL env variable may or may not be depending on if a Kafka Broker or Client is located on the same host (am I wrong?).
---
[GitHub] metron pull request #826: METRON-1291: Kafka produce REST endpoint does not ...
Posted by merrimanr <gi...@git.apache.org>.
Github user merrimanr commented on a diff in the pull request:
https://github.com/apache/metron/pull/826#discussion_r151450858
--- Diff: metron-interface/metron-rest/src/main/java/org/apache/metron/rest/config/KafkaConfig.java ---
@@ -108,6 +108,9 @@ public ZkUtils zkUtils() {
producerConfig.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
producerConfig.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
producerConfig.put("request.required.acks", 1);
+ if (environment.getProperty(MetronRestConstants.KERBEROS_ENABLED_SPRING_PROPERTY, Boolean.class, false)) {
+ producerConfig.put("security.protocol", "SASL_PLAINTEXT");
--- End diff --
Thanks @cestella. Turns out this setting was already available so it was a simple change. I also added the default application.yml and adjusted the unit test.
---
[GitHub] metron pull request #826: METRON-1291: Kafka produce REST endpoint does not ...
Posted by cestella <gi...@git.apache.org>.
Github user cestella commented on a diff in the pull request:
https://github.com/apache/metron/pull/826#discussion_r151149320
--- Diff: metron-interface/metron-rest/src/main/java/org/apache/metron/rest/config/KafkaConfig.java ---
@@ -108,6 +108,9 @@ public ZkUtils zkUtils() {
producerConfig.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
producerConfig.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
producerConfig.put("request.required.acks", 1);
+ if (environment.getProperty(MetronRestConstants.KERBEROS_ENABLED_SPRING_PROPERTY, Boolean.class, false)) {
+ producerConfig.put("security.protocol", "SASL_PLAINTEXT");
--- End diff --
I submitted a [PR](https://github.com/merrimanr/incubator-metron/pull/35) against your branch with my proposed solution to this. It fixes the issue for both the producer and consumer configs. If you choose to accept it, you can do it without my attribution.
---
[GitHub] metron pull request #826: METRON-1291: Kafka produce REST endpoint does not ...
Posted by cestella <gi...@git.apache.org>.
Github user cestella commented on a diff in the pull request:
https://github.com/apache/metron/pull/826#discussion_r150558807
--- Diff: metron-interface/metron-rest/src/main/java/org/apache/metron/rest/config/KafkaConfig.java ---
@@ -108,6 +108,9 @@ public ZkUtils zkUtils() {
producerConfig.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
producerConfig.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
producerConfig.put("request.required.acks", 1);
+ if (environment.getProperty(MetronRestConstants.KERBEROS_ENABLED_SPRING_PROPERTY, Boolean.class, false)) {
+ producerConfig.put("security.protocol", "SASL_PLAINTEXT");
--- End diff --
Well, if `metron.j2` were not available as environment variables for REST, how does `metron-rest.sh` get the spring profile to use (the `METRON_SPRING_PROFILES_ACTIVE` variable)?
---
[GitHub] metron pull request #826: METRON-1291: Kafka produce REST endpoint does not ...
Posted by merrimanr <gi...@git.apache.org>.
Github user merrimanr commented on a diff in the pull request:
https://github.com/apache/metron/pull/826#discussion_r150549974
--- Diff: metron-interface/metron-rest/src/main/java/org/apache/metron/rest/config/KafkaConfig.java ---
@@ -108,6 +108,9 @@ public ZkUtils zkUtils() {
producerConfig.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
producerConfig.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
producerConfig.put("request.required.acks", 1);
+ if (environment.getProperty(MetronRestConstants.KERBEROS_ENABLED_SPRING_PROPERTY, Boolean.class, false)) {
+ producerConfig.put("security.protocol", "SASL_PLAINTEXT");
--- End diff --
Is the KAFKA_SECURITY_PROTOCOL env variable guaranteed to be available on the the host where REST is installed? Either way I don't have a problem with making the Kafka security protocol configurable vs hard-coded. I would propose we manage it like the other REST properties though and put it in `metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/package/templates/metron.j2` to ensure it's always available to REST. Would it make sense to remove the "kerberos.enabled" spring property in this case?
---